我正在编写一个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个异步调用,而是多个异步调用)。
答案 0 :(得分:2)
试用async库
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]
});
答案 1 :(得分:1)
一种方法是检查完成的命令数量 -
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');
}
});
}