我正在使用Javascript中的跨国框架。因此,在继续之前,我需要等待上一个查询完成。例如...

// Explicit this won't work because the length is not static
var i = [1,2,3]
doSomething(i[0], function(){
  doSomething(i[1], function(){
    doSomething(i[2], function(){
       commitTransaction()
    }
  })
})


从这个示例中,我无法找到一种动态执行此操作的方法。感觉就像一个队列/递归问题,但我似乎无法破解。

还有其他人有想法吗?我也可以包装Promise,因此这也是一个选择,尽管这似乎不太同步。

最佳答案

使用async.eachSeries。因此,您的代码将转换为:

var transaction = {...};
async.eachSeries([1, 2, 3], function(value, callback) {
  doSomething(value, transaction, callback);
}, function(err) {
  if(err) throw err; // if there is any error in doSomething
  commitTransaction(transaction);
});

08-16 21:26
查看更多