2013-10-09 35 views
2

我需要在循环内执行一个异步函数(使用不同的参数)。任何想法如何在Node.js中使用Q模块来完成。 下面是一个例子: -如何使用Q.js在循环中执行异步函数

function addAsync(a, b) { 
    var deferred = q.defer(); 
    // Wait 2 seconds and then add a + b 
    setTimeout(function() { 
     deferred.resolve(a + b); 
    }, 2000); 
    return deferred.promise; 
} 

Q.all可以使用(),但是运行所有并联。由于项目需求,我基本上需要依次执行它们。

回答

4

如果你不需要坚持Q.js,我建议你看看async

Async是一个流行的异步流程控制库,它提供了大量有用的功能,包括serieswaterfall等功能,完全符合您的需求。谢谢:)

1

你有很多选择,但是这应该让你感动:

parameters.reduce(function (results, parameters) { 
    return results.then(function() { 
     return addAsync(parameters[0], parameters[1]) 
     .then(function (result) { 
      results.push(result); 
      return results; 
     }) 
    }); 
}, Q([])) 
.then(function (results) { 
    // ... 
}) 
.done() 

我有一个更愉快的解决方案,在未来的Q-IO https://github.com/kriskowal/q-io/pull/57

Reader(parameters) 
.map(function (parameters) { 
    return addAsync(parameters[0], parameters[1]) 
}, null, 1) 
.all() 
.then(function (results) { 
    // ... 
}) 

哪里1是一个并行限制器。