繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM