Возвращаемое значение из обещания, а не консоли - PullRequest
0 голосов
/ 14 октября 2018

Как мы можем вернуть значение из обещания, а не 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);
    })
}

1 Ответ

0 голосов
/ 14 октября 2018

Поскольку 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...