nodejs中的async和Q承诺



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

下面是我的代码示例:

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

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

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

CCD_ 5将CCD_ 6应用于CCD_。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);

然而,对于这段特定的代码,您不需要使用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);
    }
)

相关内容

  • 没有找到相关文章

最新更新