2016-06-14 4 views
1

私は文書の空の配列を持っています。Bluebird約束の数を変えるには? (Nodejs)

let arrayOfDocuments = []; 

私は、テキストファイルをダウンロードして、私のarrayOfDocumentsにその内容を入れて(たSuperAgentを使用して)HTTPリクエストを呼び出したいです。

request.get('docs.google.com/document/d/SOME_FILE_NAME').then((res) => { 
    arrayOfDocuments.push(res.text); 
}); 

私はそれを得るが、ここでは難しい部分です。私はこれをforループに入れて、forループの後に何かしたい。したがって、次のようになります。

for (let i = 0; i < numOfLinks; i++) { 
    // send the http requests as above 
} 

//do stuff here but only after the above for loop is finished. 

ループが終了したら最後の行だけを実行しますか?私のプログラムが現在実行されている方法では、http要求が応答して終了する前にforループの後のコードが実行されます。私はBluebird Promisesを使ってこれを行う方法があると思いますが、わかりません。ありがとう!あなたがPromise.mapメソッドを使用することができます

var promises = [] 
var links = ['a.com/a', 'a.com/b'] 

for (let i = 0; i < links.length; i++) { 
    promises.push(request.get(links[i]) 
} 

Promise.all(promises).then(function(allRes) { 
    //do anything you want with allRes or iterate 
    for (var promise in promises){ 
     promise.then(function(singleRes){/*do something with each promise after all resolve*/} 
    } 
}); 
+2

を[ 'Promise.all'](http://bluebirdjs.com/docs/api/promise.all.html)。 –

+0

どのようにリクエストを送信したのですか? – user3835653

答えて

2

使用promise.all私はあなたが探していると思う

Promise.map(arrayOfLinks, function(link) { 
    return request.get(link); 
}).then(function(arrayOfDocuments) { 
    // ... 
}); 
+0

これらのリクエストのそれぞれの回答はどうすれば得られますか?私はそれぞれのレスポンスのタイプ(res.type)をチェックして、異なるタイプのやや異なることをしたいのです。メソッドの – user3835653

+0

は、promiseの配列によって順序付けられた応答の配列にアクセス可能です。 –

+0

私はどのような方法ですか? – user3835653

4

:それはのようになります実際には、ここでhttp://bluebirdjs.com/docs/api/promise.all.html

示すよう

+0

状況に応じて(特に個々の約束事を気にせず、すべての約束事を集めたい場合)、この解決策は私のものよりも優れています。私はこれが大文字であったならば質問を読んだ後、私は不明であったので、私の答えで提示されたより一般的なアプローチです。 – stygma

関連する問題