配列がif
の条件を通過するasync.each()
に配列を渡していますが、配列がelse
ステートメントに入力されているときに条件が満たされたときに配列に項目を追加すると、実行はshippo応答を待機しません。次の行に移動し、応答をサーバーに送信します。コールバック関数からの応答が得られるまで、実行フローを停止するにはどうすればよいですか?
私たちは、数秒後にshippo
からの応答を取得していることに気づいたので、私はelse
ブロックの完了後setTimeout()
機能を置き、それでも私のコンソールにメッセージ'c'
が最後に印刷されます。私はコールバックと非常に混同され、どのように動作するのでしょうか。 shippo
から応答が出るまで実行フローを停止する方法はありますか?
var async = require('async');
import each from 'async/each';
async.each(trackingnumbers, function (value, callback) {
value['TrackingNo'] = parseInt(value['TrackingNo']);
value['Provider'] = value['Provider'].toLowerCase();
if (value['Provider'] == "domestic") {
items.push({ 'TrackingNo': value['TrackingNo'], 'Provider': value['Provider'], 'Status': 'Completed' });
console.log('a');
}
else {
console.log('b');
shippo.track.get_status(value['Provider'], value['TrackingNo']).then(function (status) {
console.log('c');
items.push({ 'TrackingNo': value['TrackingNo'], 'Provider': value['Provider'], 'Status': status.tracking_status });
}, functionconsole.log('d'); (err) {
console.log("There was an error retrieving tracking information: %s",+ err);
callback('There was an error retrieving tracking information:');
//
});
console.log('d');
e }
console.log('e');
setTimeout(function(){
callback();
},3000);
}, function (err) {
if (err) {
console.log('error occured ' + '|' + err);
}
else {
console.log(items);
res.setHeader("Access-Control-Allow-Origin", "*");
res.send(items).status('200');
}
});
Here is my output along with the shippo response after we placed an timeout function
コールバックのアイデアは、コールした後は何もしないで、コールが完了したらコールバック関数を実行するということです。実行を停止するには、呼び出しの後にコードがありません。 – Archer