搜索
node.js - nodejs中promise库的问题
PHP中文网
PHP中文网 2017-04-17 12:04:13
[Node.js讨论组]
  var promise =new Promise(function (resolve,reject) {
      return Promise.resolve(mongo.merchant.findOne({id: merchantId}));
    });
    promise.then((merchant)=> {
      return Promise.resolve(mongo.display.find({id: {'$in': merchant.displays}}));
    }).then((displays)=> {
      return Promise.resolve(displays);
    }).catch((err)=>{
      return Promise.reject(err);
    });
  }

这样返回值到

displayService.getByMerchantId(req.query.merchantId).then((displays)=> 

这里就报错。

大牛们求助,感觉是我有地方完全理解错误了,但是找不到地方了。

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
ringa_lee

new Promise() 里不应该 return Promise.resolve() 吧,应该直接 return resolve() 才对

var promise = new Promise(function(resolve, reject) {
    // return Promise.resolve("hello");
    resolve("hello");
});

不过这不是问题的关键,关键要看你 displayService.getByMerchantId() 返回的是个啥。得返回一个 Promise 对象才能 then 啊。

如果你上面给的是 getByMerchantId() 的内容,大概应该这样改改

var displayService = {
    getByMerchantId: function() {
        var promise = new Promise(function(resolve, reject) {
            resolve(mongo.merchant.findOne({
                id: merchantId
            }));
        });

        return promise.then((merchant) => {
            return Promise.resolve(mongo.display.find({
                id: {
                    '$in': merchant.displays
                }
            }));
        }).then((displays) => {
            return Promise.resolve(displays);
        }).catch((err) => {
            return Promise.reject(err);
        });
    }
}

不过函数里面最后的 thencatch 都是多余的,可以简化

var displayService = {
    getByMerchantId: function() {
        var promise = new Promise(function(resolve, reject) {
            resolve(mongo.merchant.findOne({
                id: merchantId
            }));
        });

        return promise.then((merchant) => {
            return Promise.resolve(mongo.display.find({
                id: {
                    '$in': merchant.displays
                }
            }));
        });
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号