在一系列异步调用之后使用Future返回

时间:2014-03-01 13:31:11

标签: javascript node.js asynchronous

我正在编写一个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个异步调用,而是多个异步调用)。

2 个答案:

答案 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');
      }

    });
  }