我们如何从Promise而不是console.log返回值?如果我将控制台更改为return(values[1] - values[0])
。并尝试做console.log(balance(user))
,它会打印Promise { <pending> }
。
我不知道我是否做对了,我想做的是通过从所有存款/取款中减去所有购买来获得用户余额。不做任何承诺,它将在完成数据库查询之前返回值。有更好的解决方案吗?
function totalPurchases(user) {
return new Promise(function (resolve, reject) {
Purchase.getTotalPurchases(user, function (err, tot) {
if (err) {
// console.log(err);
reject(new Error("Error: 1002"));
// return false;
}
else {
resolve(tot[0].purchases);
}
})
})
}
function totalDW(user) {
return new Promise(function (resolve, reject) {
DepWid.getTotalDepwids(user, function (err, tot) {
if (err) {
reject(new Error("Error: 1003"));
}
else {
resolve(tot[0].depWids);
}
})
})
}
exports.balance = async (user) => {
let promises = [];
promises[0] = totalPurchases(user);
promises[1] = totalDW(user);
Promise.all(promises)
.then(function (values) {
console.log(values[1] - values[0]);
//Return this rather than console.log
})
.catch(function (err) {
console.log(err);
})
}
答案 0 :(得分:2)
由于balance
是一个异步函数,因此您可以等待Promise.all
,然后再返回结果。
function totalPurchases(user) {
return new Promise(function (resolve, reject) {
setTimeout(function(){
resolve(5);
}, 2000);
})
}
function totalDW(user) {
return new Promise(function (resolve, reject) {
setTimeout(function(){
resolve(3);
}, 1000);
});
}
let balance = async (user) => {
let promises = [];
promises[0] = totalPurchases(user);
promises[1] = totalDW(user);
const [deposits, withdrawals] = await Promise.all(promises);
return deposits - withdrawals;
}
balance().then(r => { //If `balance' is called from an async method you can do await here. Else you need to do `then` like I have done here
console.log(r); //prints 2
});