この質問はrequestに関するもので、 request-promiseにもマップされる場合があります。
次の例では:
let myPromise = rp('http://www.google.com'); // Line 1
// do something ...
await myPromise; // Line 2
リクエストはいつ送信されますか?
Line 1
が呼び出されたときに送信されrp(...)
、返された約束は応答を待つことですか?- それとも
Line 2
、返された約束が実行されたときに送信されますか?
次の例によると、答えは次のとおりですrp(...)
。リクエストを送信しません。実際には、リクエストを送信するために後で実行されるイベントループに呼び出しを追加します。
// server.js
var http = require('http');
const server = http.createServer((req, res) => {
console.log(new Date().toISOString(), ' - Request received by server.');
res.end('All good');
});
server.listen(3001);
-
// client.js
var rp = require('request-promise');
rp('http://localhost:3001');
console.log('something');
// Break point
プロセスがイベントループに戻らない場合、リクエストは送信されないという私の試行からのようです。
リクエストをすぐに実行し、後で待つ方法はありますか?
「応答を配信するという約束」で戻る前に、要求が送信されることを保証する別のライブラリはありますか?
編集:
@terry-lenoxx のコメントrequest-promise によると、実際にはリクエストをキューに入れ、リクエストをすぐには送信しません。制御がイベント ループに戻ると、キューに入れられた要求が送信されます。
これは、複数のリクエストをまとめて送信し、後で各レスポンスを結合したいという私の場合に役立ちます。これは、次のように簡単に実行できます。
var rp = require('request-promise');
async function doSomething() {
let req1 = rp('http://localhost:3001'); // Queue req1
let req2 = rp('http://localhost:3001'); // Queue req2
let response1 = await req1; // Send both req1, req2 and wait for response of req1
let response2 = await req2; // wait for response of req2
console.log('something');
}
doSomething();
この動作をテストしたところ、非常に明確です。