私のコードを単純化して問題を表示しようとしました。 コールバックでグローバル変数を設定する
var rp = require('request-promise');
var ids = [];
runmyFunction();
runmyFunction();
function runmyFunction() {
var id = 5;
console.log("runmyFunc: "+ids);
if (ids.indexOf(id)==-1){
myFunction(id);
}
}
function myFunction(id) {
var options = {
uri: 'someURI'
, headers: {
'User-Agent': 'Request-Promise'
}
, json: true
};
rp(options)
.then(function (response) {
ids.push(5);
console.log("myFunc: "+ids);
})
.catch(function (err) {
console.log(err);
});
}
は基本的に私はそれのid 12345が存在しない場合にのみ
myFunction
を実行する必要があり、この機能
runmyFunction
を、持っています。だから、もし私が10回実行し、11回目のid 12345が返されたら、関数の実行を止めるべきです。 問題は、要求が成功した場合でもIDが配列にプッシュされることはありません。
同様の問題は、要求が非同期であることと関係していました。これも私のコードの原因ですか?
//編集私はそれを使い、コードを編集しました。現在のコードはこれをコンソールに記録します:
runmyFunc:
runmyFunc:
myFunc:5
myFunc:5,5
これは非同期なのでです。それを避けるためのあらゆるアイデア?
IDはリクエストに由来するため、実際にリクエストIDを確認することはできません。あなたは他の論理を見つける必要があります。 – Shilly
申し訳ありませんが、関数が複数回実行され、idが配列内にある場合は停止することを明確にしていませんでした。私はそれを修正した。 – Trojan
IDを1つずつ呼び出す場合は、各IDの到着後にチェックを実行してください。それが12345でなければ、myFunctionが再度起動させてください。 PS:IDが実際に受信しているデータに含まれているかどうかを確認しましたか? – Shilly