0
私はunirestライブラリを使用して、offsetとlimitsパラメータで分割されたapiからすべてのデータを取得しています。結果。Node.js - whileループの中でhttpリクエストが動作しない
データを反復処理するためにwhile条件を使用していますが、結果が返されない時点で、 'incomplete'変数をfalseに設定してループを終了します。
何らかの理由で、'call_and_retry_last allocation failed'
エラーが発生するまで何も起こりません(データがデータベースに追加されず、コンソールに何も出力されないため)長い間)。しかし、whileの条件をすべて削除すると、コードは正常に動作します。
これが機能しない特別な理由はありますか?
は、ここに私のコードです:
var limit = 50,
offset = 0,
incomplete = true;
while (incomplete) {
// make api call
unirest.get("https://www.theapiurl.com")
.header("Accept", "application/json")
.send({ "limit": limit, "offset": offset })
.end(function (result) {
// parse the json response
var data = JSON.parse(result.raw_body);
// if there is data
if(data .length > 0)
{
// save the api data
// + increase the offset value for next set of data
offset += limit;
}
else
{
// if there is no data left, end loop
incomplete = false;
console.log("finished!");
}
});
}
としてrecurrcive機能を使用することができます。しかし、その頃には、あなたの反応が現れ、ループはさらに進む。滝やシリーズモデルでAsync.ioなどを使用してください。 – Anistark
asyncとsyncコードを一緒に使用しようとしています。 Whileループはあまりにも多くのリクエストを送信し、スタックサイズのエラーが発生します。 http://caolan.github.io/async/を使用するか、約束を作成してPromise.allで実行してみてください。お役に立てれば。 –
非同期アクションが完了するまでループを一時停止させるには、ループのボディの最後に 'fut.wait()'、最後に 'fut.return()'を見てください。 '.end'の本体(_nodejs_でのみ可能) –