簡體   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