首页 > 解决方案 > 节点路由器无法使用异步等待从 Sequelize 获取数据

问题描述

第一次使用Sequelize我在我的节点路由器中尝试这个代码:

router.get('/get-users', async (req, res, next) => {
  const data = await users.getAll()
  console.log('users in router:', data);
  res.send(data)
});

这是sequlize代码:

const users = {
  getAll () {
    sequelize
      .query('SELECT * FROM users', { model: User })
      .then(users => {
        console.log('users in database:', users);
        return users;
      })
  }
};

Sequelize 代码中的日志语句为我提供了正确的数据,但路由器中的日志语句未定义。

这可能是异步等待问题,但你能帮忙吗?

标签: node.jsasynchronoussequelize.js

解决方案


尝试在 getAll() 中返回承诺。Await 只是 promise 的 then() 调用的包装器,但由于您没有返回 promise,所以 await 不会等待 promise。

  getAll () {
    return sequelize
      .query('SELECT * FROM users', { model: User })
      .then(users => {
        console.log('users in database:', users);
        return users;
    })
  }

推荐阅读