【发布时间】:2021-09-15 02:59:56
【问题描述】:
我正在使用 Knex 从数据库中进行简单的选择查询。我在 then 函数中返回了一个值,并在异步调用之前添加了 await。但是 await 不会等待,而是始终以未定义的值继续运行下一行。
这是带有查询结果的 console.log 的用户模型文件,它总是最后打印:
import knex from '../db/db.config.js';
const User = {};
User.findByNameAndPassword = (username, password) => {
knex('user')
.where({ name: username })
.where({ password: password })
.then(rows => {
console.log(rows);
return rows;
})
.catch((error) => {
console.log(error);
})
}
export default User;
这是控制器,这里的console.log总是先打印出来的:
import User from '../models/user.js';
export const login = async (req, res) => {
let name = req.body.name;
let password = req.body.password;
let user = await User.findByNameAndPassword(name, password)
console.log('user', user);
}
【问题讨论】:
-
你没有从方法中返回 Promise,所以没有什么可以等待的。
-
@JaredSmith 我已经修复了这个错误,但我仍然很困惑。然后在 findByNameAndPassword 方法中,我返回行,如文档所述,这些行被转换为 Promise。但是为什么它不起作用。
标签: javascript node.js async-await