在promise中返回值

时间:2019-06-07 20:46:02

标签: node.js express sequelize.js

我已经阅读了一些与此相关的主题,但是没有帮助,或者我无法使它们起作用。我有:

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 变量但没有起作用的原因,请您帮我一下吗?谢谢!

2 个答案:

答案 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