我已经阅读了一些与此相关的主题,但是没有帮助,或者我无法使它们起作用。我有:
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
}
我想返回 number [0] .avg_rated ,这就是为什么我创建了 average 变量但没有起作用的原因,请您帮我一下吗?谢谢!
答案 0 :(得分:1)
“ Promise.findA”是异步的,其余的都是同步的。您的最后一行将在Promise解决之前执行,并返回“ undefined”。
答案 1 :(得分:1)
您的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