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
大牛们求助,感觉是我有地方完全理解错误了,但是找不到地方了。

promise node.js

邓迪的钩子 9 years, 11 months ago

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);
        });
    }
}

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


 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
                }
            }));
        });
    }
}

堕落的猴子 answered 9 years, 11 months ago

Your Answer