javascript - 如何等待执行findOne的sequelize

标签 javascript node.js sequelize.js

我有一条使用 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/

相关文章:

javascript - Accordion 高度问题

javascript - React 应用程序中 Adyen 的 Checkout SDK 集成

node.js - 使用 multer 发送附件

angularjs - npm install <package> 不起作用

node.js - 如何在NodeJs中的sequelizer中执行异步查询

javascript - jQuery 实时更新按钮文本值

javascript - 检查数组对象中的多个值 - AngularJS

node.js - 更新项目时如何防止 mongoDB 中的重复项目

sql - 如何使用 Sequelize 将项目插入序列中,或如何管理排序属性

node.js - Sequelize - 包含关联问题