您好,我尝试使用Sequelize,并且需要在DB中返回一个Object,这是我的一段代码;
像这样的简单
const { User, Appointment } = require('../models')
const moment = require('moment')
const { Op } = require('sequelize')
class MyAppointmentController {
async index(req, res) {
const { id } = req.session.user
const appoitments = await Appointment.findAll({
where: {
providerId: id,
date: {
[Op.between]: [
moment()
.startOf('day')
.format(),
moment()
.endOf('day')
.format()
]
}
}
})
const available = appoitments.map(appoint => {
const user = User.findByPk(appoint.userId).then(res => {
console.log('Issue', res)
})
return {
appoint,
date: moment(appoint.date).format('HH:mm'),
user: user.name,
avatar: user.avatar
}
})
return res.render('appointments/list', { available })
}
}
module.exports = new MyAppointmentController()
我知道这是一个承诺,但不可能获得回报... 控制台res是print属性
但是 用户 总是 待审核 ,如果我尝试这样做
const user = User.findByPk(appoint.userId).then(res => {
another_var = res
return res
})
console.log(enother_var)<<未定义
为什么会这样?而我该如何解决呢?
答案 0 :(得分:1)
如果您要遍历列表,但需要对每个列表进行异步调用,建议您使用async/await
:
class MyAppointmentController {
async index(req, res) {
const { id } = req.session.user
const appoitments = await Appointment.findAll({
where: {
providerId: id,
date: {
[Op.between]: [
moment()
.startOf('day')
.format(),
moment()
.endOf('day')
.format()
]
}
}
})
const available = [];
for (appoint of appoitments) {
const user = await User.findByPk(appoint.userId);
available.push({
appoint,
date: moment(appoint.date).format('HH:mm'),
user: user.name,
avatar: user.avatar
})
};
return res.render('appointments/list', { available })
}
}
这就是您的代码无法正常工作的原因:
.map
上致电appoitments
,但从未返回任何东西。调用.map
时必须返回一个值。就您而言,您可能打算返回用户实例列表; user
,而不是承诺的结果。这就是为什么它总是读为pending
的原因。