Node.js nodejs中的异步和Q承诺

Node.js nodejs中的异步和Q承诺,node.js,asynchronous,q,node-async,Node.js,Asynchronous,Q,Node Async,我正在使用nodejs中的库和库 下面是我的代码示例: async.each(items, cb, function(item) { saveItem.then(function(doc) { cb(); }); }, function() { }); saveItem是一种承诺。当我运行这个时,我总是得到cb未定义的,我猜then()没有访问权限。有什么办法解决这个问题吗?你的问题不在于承诺,而在于你对async的使用 async.each(items,handler,fi

我正在使用nodejs中的库和库

下面是我的代码示例:

async.each(items, cb, function(item) {

 saveItem.then(function(doc) {
    cb();
 });

}, function() {

});

saveItem
是一种承诺。当我运行这个时,我总是得到
cb未定义的
,我猜
then()
没有访问权限。有什么办法解决这个问题吗?

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

async.each(items,handler,finalCallback)
handler
应用于
items
数组的每个项。
处理程序
函数是异步的,也就是说,它被交给一个回调函数,当它完成工作时必须调用该回调函数。完成所有处理程序后,将调用最终回调

以下是解决当前问题的方法:

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
:仅承诺就可以很好地完成这项工作,尤其是:


很好,你提到了
Q.all
solutionHot代码。肯定会为了乐趣和利润而使用它。:)
// 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);
    }
)