我有一条使用 Sequelize.js 的路线
app.get('/api/users/:username', (req, res) => {
const foundUser = getUserByUsername(req.params.username);
console.log(`foundUser = ${foundUser}`);
return res.send(foundUser);
});
getUserByUsername函数如下
const getUserByUsername = username => {
Viewer.findOne({
where: {username}
}).then(response => {
console.log(response.dataValues);//the object with the data I need
return response.dataValues;
});
};
我希望在我的路由中获取 constfoundUser 中的对象,但似乎我需要等到 findOne 被执行,因为在我的控制台中我可以看到 findUser 的日志(当时未定义)在函数 getUserByUsername 之前执行
foundUser = undefined
Executing (default): SELECT `id`, `username`, `instakluiten`, `role`, `createdAt`, `updatedAt` FROM `viewers` AS `viewer` WHERE `viewer`.`username` = 'instak' LIMIT 1;
{ id: 19,
username: 'instak',
instakluiten: 18550,
role: 'moderators',
createdAt: 2016-10-02T16:27:44.000Z,
updatedAt: 2016-10-09T10:17:40.000Z }
如何确保在找到用户后我的foundUser 将使用数据进行更新?
最佳答案
您必须返回 Sequelize 创建的 promise ,然后等待它解决。因此 getUserByUsername
变为:
const getUserByUsername = username => {
return Viewer.findOne({
where: {username}
}).then(response => {
console.log(response.dataValues);//the object with the data I need
return response.dataValues;
});
};
在 route :
app.get('/api/users/:username', (req, res) => {
getUserByUsername(req.params.username).then(foundUser => {
res.send(foundUser);
});
});
这是因为你需要遵守一连串的 promise 。如果您忘记返回它,即使最终解决了 Promise,该函数也会返回 undefined
end,它解析的值永远不会回到链中。
关于javascript - 如何等待执行findOne的sequelize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942570/