2017-09-01 6 views
0

リクエストライブラリを使用してAPI経由で他のサーバーと通信します。しかし、今では複数の(10以上の)POST要求を同時に送信し、すべての応答が正しい場合にのみさらに移動する必要があります。通常、構文は次のようになります。Node.jsリクエスト - 複数のPOSTリクエストを処理する

var options = { 
url: "", 
method: "POST", 
header: {...}, 
body: {...} 
}; 

request(options, function(err,response,body) 
{ 
} 

しかし、今ではオプション変数の代わりにオブジェクトの配列があります。これを行う方法はありますか?あるいは、問題を処理できる別のライブラリがあります。

EDIT:

この解決するには、いくつかのアプローチがあり
var arrayOfIds = []; 
const requests = []; 
for(var i in range){ 
    var options = {} // here goes all bodies and headers to send 
    requests.push(// push a request to array dynamically 
    request(options, function(err,response,body){ 
    if(!err && response.statusCode == 201){ 
     arrayOfIds.push(body.id); 
    } 
    })); 

Promise.all(requests) 
.then(function(res){ 
    console.log(arrayOfIds); // this is empty 
}); 
+0

[非同期要求をループ]の可能な重複(https://stackoverflow.com/questions/44636542/loop-through-asynchronous-request) –

答えて

1

  • 非同期ライブラリー、約束にあなたの要求を切り替える

  • Promise.all平行法は、 、requestモジュールに追加使用 - request-promise

    const request = require('request-promise'); 
    
    // Note, you don't assign callback here 
    const promises = [ 
        request.post({...}), 
        request.post({...}), 
        request.post({...}) 
    ]; 
    
    // And then you simply do Promise.all 
    Promise.all(promises).then(console.log); 
    
  • +0

    ありがとう:コードでは、次のようになります。これは非常に役に立ちます。そして、もし私が要求の正確な数を知らないのであれば?私はconstの約束を満たすために定期的なループを使用する必要がありますか? – Jacek717

    +0

    動的に入力するだけで問題ありません。 – Lazyexpert

    +0

    最後にもう1つの質問:これらのリクエストはすべて、別のサーバーでちょうど作成したオブジェクトのIDを私に送り返す必要があります。私はIDの配列を作成し、body.idの値がすべて正しい場合にそれをプッシュするためにそれを実装しようとしました。しかし、それはうまく動作せず、Promise.allの後に空の配列しか得られません。あなたはそれを修正する方法を知っていますか?最初のコードを編集してすべてを表示しました – Jacek717

    関連する問題