Возврат значения в обещании. Затем - PullRequest
0 голосов
/ 07 июня 2019

Я прочитал некоторые темы, связанные с этим, но это не помогло, или я не мог заставить их работать.У меня есть:

exports.findBookRating = (book) => {
var average;
Review.findAll({
    where: {
        bookId: book.id
    },
    attributes: [[sequelize.fn('avg', sequelize.col('rating')), 'avg_rated']],
    raw: true
})
.then(number => {
    average = number[0].avg_rated;

    console.log(average); //this works
})
.catch(err => {
    console.log(err);
});

console.log(average) // this does not work
}

Я хотел вернуть число [0] .avg_rated , и именно поэтому я создал эту переменную Среднее , но она не работала,не могли бы вы мне помочь?Спасибо!

Ответы [ 2 ]

1 голос
/ 07 июня 2019

ваш Review.findAll является асинхронным, что означает, что сразу после вызова он перейдет к вашему console.log(average) // this does not work

И поскольку он асинхронный, к моменту вызова console.log(average) // this does not work, возможно, average еще не было установлено.

Продолжайте код внутри части .then или используйте await, если вам нужно значение из асинхронного вызова.

Пример использования await:

const number = await Review.findAll()
const average = number[0].avg_rated
1 голос
/ 07 июня 2019

«Promise.findA» является асинхронным, а остальное - синхронизированным. Ваша последняя строка будет выполнена до того, как ваше Обещание будет разрешено и, таким образом, вернет «неопределенное».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...