nodejs中的async和Q promise

 缅甸环球国际 发布于 2023-02-10 09:28

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

这是我的代码示例:

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

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

}, function() {

});

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

1 个回答
  • 你的问题不在于承诺,而在于你的使用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);
    

    但是,您不需要使用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);
        }
    )
    

    2023-02-10 09:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有