从承诺而不是从控制台返回价值

乔·穆蒂

我们如何从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);
    })
}
邦尼

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

控制台返回[Object object]而不是对象成员

如何控制台登录承诺?

Javascript承诺和控制台日志?

控制台日志记录在函数返回对象时打印承诺,但在数据不是对象时打印数据

节点承诺 - 控制台打印嵌套但无法从 firebase 函数返回值

React Native AsyncStorage返回承诺而不是价值

节点:登录文件而不是控制台

显示文本而不是控制台日志

从文件而不是从控制台读取

当请求不是来自Firebase控制台时,RemoteMessage.GetNotification()返回null?

如何从递归函数返回值而不是打印到控制台?

如何将这些JSON对象返回到浏览器而不是控制台

为什么Chrome的JS控制台返回DOM元素而不是jQuery对象?

摩卡控制台日志显示对象承诺

承诺延迟对量角器控制台登录的影响

控制台返回未定义

从控制台读取最后返回的值

获取对象返回的控制台错误

Alexa 技能控制台返回 null

控制台登录 Reduce() 返回 NaN

来自早期承诺的控制台日志出现在来自最新承诺的控制台日志之后

从控制台结果中识别价值路径

如何在Javascript中从控制台获取元素的价值

不是电子铬的功能,但不是节点控制台

itorch创建一个python控制台,而不是torch控制台

将cmd stdout和stderr作为字符串返回,而不是在golang中打印到控制台

控制台日志显示整个文件而不是数据

AWS Amplify 控制台显示奇怪的 xml 而不是 404

将结果输出到日志文件而不是控制台