0

この質問は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();

この動作をテストしたところ、非常に明確です。

4

1 に答える 1