getAccomodationCost是一个函数,它应该返回一个带有返回值的promise。现在它没有定义错误解决方法。
然后在promise内的行解析(JSON.parse(JSON.stringify(result)))中抛出此错误消息。如果我用return返回关键字resolve,则main函数中的Promise.all调用将失败。
有人可以帮我从下面的函数返回一个带有返回值JSON.parse(JSON.stringify(result))的promise。
var getAccomodationCost = function (req, res) {
var accomodationCostPromise = new Promise(function (resolve, reject)
{
getHospitalStayDuration(req, res, function (duration) {
resolve(duration)
})
})
.then(function (duration) {
hotelModel.aggregate([
//Some logic here
], function (err, result) {
resolve(JSON.parse(JSON.stringify(result)))
})
})
return accomodationCostPromise;
}
//Main function where the above snippet is called
const promise1 = somefunction(req, res);
const accomodationCostPromise = getAccomodationCost(req, res)
Promise.all([promise1,accomodationCostPromise])
.then(([hospitalInfo,accomodationCost]) => {
//Return some json response from here
}).catch(function (err) {
return res.json({ "Message": err.message });
});
答案 0 :(得分:2)
如果可能,hotelModel.aggregate
会返回一个承诺。这使得代码看起来像这样:
.then(function (duration) {
return hotelModel.aggregate([
//Some logic here
]).then(result => JSON.parse(JSON.stringify(result))) // Not sure why you're stringify/parsing
})
如果您无法修改hotelModel.aggregate
以返回承诺,则需要创建另一个承诺并从.then(function (duration)
返回该承诺,类似于您对getHospitalStayDuration
的承诺。
答案 1 :(得分:-2)
Promise
只能履行一次。 resolve()
在函数内被调用两次,resolve
未在.then()
中定义。 resolve
在Promise
构造函数执行函数中定义。应在Promise
内使用第二个.then()
。
var getAccomodationCost = function (req, res) {
return new Promise(function (resolve, reject) {
getHospitalStayDuration(req, res, function (duration) {
resolve(duration)
})
})
.then(function (duration) {
return new Promise(function(resolve, reject) {
hotelModel.aggregate([
//Some logic here
], function (err, result) {
if (err) reject(err);
resolve(JSON.parse(JSON.stringify(result)))
})
})
});
}