2016-06-28 9 views
0

この質問は少し曖昧かもしれませんが、私は説明するために最善を尽くします。APIから非同期の結果を順番に処理する方法はありますか?

TwitterのAPIから取得できるすべてのツイートの配列を作成しようとしていますが、返されたツイートは200個に制限されています。返されたつぶやきの最大制限3200まで非同期にTwitterにリクエストするにはどうすればよいですか?つまり、TwitterのAPIを非同期に呼び出すことは可能ですが、配列を順次構築して、つぶやきが日付に関して正しくソートされていることを確認してください。

だから、私は配列があります。

var results = []; 

を、私は、ノードの要求モジュールを使用しています:

var request = require('request'); 

私は(200のちょうど制限のため)今持っているものは

です
request(options, function(err, response, body) { 
    body = JSON.parse(body); 
    for (var i = 0; i < body.length; i++) { 
     results.push(body[i].text); 
    } 
    return res.json(results); 
}); 

「promise」モジュールを使用している可能性がありますが、分かりにくいです。私はwhileループを使ってみましたが、サーバが取っていたパスに従うことができなかったので複雑になりました。

これがうまく説明できない場合は教えてください。

結局のところ、結果は、リクエストが送信するすべてのつぶやきが入った配列になります。

答えて

1

requestの代わりにrequest-promiseを使用することをお勧めします。ここに私の解決策があります。

var rp = require('request-promise'); 
var tweets = []; 
var promises = []; 
for (var i =1; i< 10; i++){ 
    var promise = rp(options); 
    promises.push(promise); 
} 
Promise.all(promises).then(function(data){ 
    data.forEach(function(item){ 
    // handle tweets here 
    }); 
    return res.json(tweets); 
}); 
+0

すべてのデータを処理する前に、リクエストから一部のデータにアクセスする必要があります...どうすればいいですか?約束の内容に「覗いてみたい」のようなもの? –

関連する問題