asynchronous和Q承诺在nodejs

我在nodejs中使用Q库和asynchronous库。

这是我的代码的一个例子:

async.each(items, cb, function(item) { saveItem.then(function(doc) { cb(); }); }, function() { }); 

saveItem是一个承诺。 当我运行这个,我总是得到cb is undefined ,我想then()没有访问权限。 任何想法如何解决这个问题?

你的问题不在于承诺,而在于你使用async

async.each(items, handler, finalCallback)handler应用于items数组中的每个项目。 handler函数是asynchronous的,也就是说它是一个callback函数,当它完成工作时它必须调用它。 当所有的处理程序完成后,最后的callback被调用。

以下是你如何解决你当前的问题:

 var handler = function (item, cb) { saveItem(item) .then( function () { // all is well! cb(); }, function (err) { // something bad happened! cb(err); } ); } var finalCallback = function (err, results) { // ... } async.each(items, handler, finalCallback); 

然而,你不需要为这段特定的代码使用async :promise只是很好地填充这个工作,特别是在Q.all()

 // Create an array of promises var promises = items.map(saveItem); // Wait for all promises to be resolved Q.all(promises) .then( function () { // all is well! cb(); }, function (err) { // something bad happened! cb(err); } )