nodejs中的async和Q promise

dzm*_*dzm 6 asynchronous node.js node-async q

我在nodejs中使用Q库和异步库.

这是我的代码示例:

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

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

}, function() {

});
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*gel 20

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

async.each(items, handler, finalCallback)适用handleritems数组的每个项目.该handler函数是异步的,即它被传递回调,它必须在它完成工作时调用.完成所有处理程序后,将调用最终的回调函数.

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

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);
Run Code Online (Sandbox Code Playgroud)

但是,您不需要使用async这段特殊代码:仅凭承诺就可以很好地完成这项工作,尤其是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);
    }
)
Run Code Online (Sandbox Code Playgroud)