nodejs中promise库的问题

  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)=> 

这里就报错。
clipboard.png
大牛们求助,感觉是我有地方完全理解错误了,但是找不到地方了。

阅读 4.5k
1 个回答

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
                }
            }));
        });
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题