変数を変更するループ内でコールバックを待ちながら、まだ非同期性を使用するにはどうすればよいですか?
2 番目の例は async を使用しています。この場合、グローバル var を回避するために に2 番目のパラメータsum
を追加する方法がわかりません。戻り値と同様に呼び出されますwait
sum
wait(sum,value);
sum
wait
は、実際の問題で使用する複雑な関数の表現であるため、「インライン」コードに書き直すことはできず、「関数」のままにする必要があります。
例1:
var _ = require('underscore');
var arr = [1,2,3,4,5,6,7];
var sum = 0;
function wait(item,callback) {
setTimeout(function() {
callback(item);
}, Math.ceil(Math.random()*1000));
}
var done = _.after(arr.length,function(value) {
console.log('sum ='+value);
})
_.each(arr,function(itm) {
wait(itm,function(value) {
console.log('waiting... '+value);
sum = sum + value;
})
// Please wait for the callback
console.log(itm);
done(sum);
});
例 2:
function asyncExample2() {
var async = require('async');
var arr = [1,2,3,4,5,6,7];
function otherWait(item, callback) {
setTimeout(function() {
callback(item); // call this when you're done with whatever you're doing
}, Math.ceil(Math.random()*1000));
}
function wait(item, callback) {
setTimeout(function() {
otherWait(item,function() {
console.log(item);
});
callback(item);
}, Math.ceil(Math.random()*1000));
}
function done() { console.log("sum = "+sum);};
var sum = 0;
async.forEach(arr, wait, done);
}
ご希望の電話番号:
sum = wait(sum,item)