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)=>
这里就报错。
大牛们求助,感觉是我有地方完全理解错误了,但是找不到地方了。
Answers
在
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
}
}));
});
}
}