我想将此函数更新为异步,但无法使从交互对象映射的用户对象返回相同格式的数据,并且异步函数中的值几乎为零。在控制台中,我仅获得Promise对象且未定义。
这是我的工作代码:
Interaction.findAll({
where: {
targetUserId: fbId,
status: 'invited'
},
order: [['createdAt', 'DESC']]
}).then(function (interactions) {
Promise.all(interactions.map(interaction =>
User.findOne({
where: {
facebookUserId: interaction.userId
},
attributes: ['firstName', 'facebookUserId', 'pictureUrl']
}))).then(function (users) {
res.status(200).send(users.map(user => user.dataValues));
})
},
到目前为止,这是我所拥有的,但是我的数据没有以相同的格式返回给客户端:
try {
const interactions = await Interaction.findAll({
where: {
targetUserId: userId,
status: 'invited'
},
attributes: ['lastReplyAt', 'seen', 'userId'],
})
const users = await interactions.map(interaction => User.findOne({
where: {
facebookUserId: interaction.userId
},
attributes: ['firstName', 'facebookUserId', 'pictureUrl'],
}))
res.status(200).send(users.map(user => user.dataValues));
}
catch (error) {
console.log(error);
res.status(500).send(error);
}
如果我只返回用户对象,则错误更具体,并说“名字”为nil。返回用户映射的对象给我一个关键错误。
答案 0 :(得分:2)
尝试一下:
interaction = await Interaction.findAll({
where: {
targetUserId: fbId,
status: 'invited'
},
order: [['createdAt', 'DESC']]
})
users = await Promise.all(interactions.map(interaction => {
User.findOne({
where: {
facebookUserId: interaction.userId
},
attributes: ['firstName', 'facebookUserId', 'pictureUrl']})
})
res.status(200).send(users.map(user => user.dataValues));