[英]Using Future to return after a series of async calls
我正在編寫一個JavaScript(node.js)函數,該函數(異步)進行多個exec()調用,並且在所有這些操作完成后,我需要使用Future返回。
我所擁有的是:
run: function(command, callback) {
for (var i = 0; i < testCases.length; i++) {
var child = exec(command, options, function(error, stdout, stderr) {
// calculate `answer`
if (answer == "wrong") callback(answer);
});
}
},
因此,如果answer
是“錯誤的”,那么我可以輕松地調用回調,僅此而已。 但是,如果不是所有的答案都是“錯誤的”(換句話說,如果所有的exec
都具有answer=="correct"
),那么我不知道如何返回這樣的值。
我知道我可以為此使用Future
(來自npm
)。 但是,在這種情況下(我不僅只有1個異步調用,而沒有多個異步調用),我真的看不到如何使用它。
嘗試異步庫
async.times(testCases.length, function(n, next){
var child = exec(command, options, function(error, stdout, stderr) {
// calculate `answer`
var data = {answer : answer};
if (answer == "wrong") {
next({err: answer}, data);
}
else {
next(null, data);
}
});
}, callback(err, data) {
// you can also check for err
// we now have an array of data[testCases.length]
});
一種方法是檢查已完成的命令數量-
var totalCompleted = 0;
var done = false;
for (var i = 0; i < testCases.length; i++) {
var child = exec(command, options, function(error, stdout, stderr) {
// calculate `answer`
totalCompleted++;
if (answer == "wrong" && !done) {
done = true;
return callback(answer);
}
if(totalCompleted === testCases.length && !done) {
callback('right');
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.