[英]javascript - await doesn't wait
我正在使用 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);
}
為了讓await
工作,您需要在返回承諾的函數或承諾本身上使用它。
為此,請在User.findByNameAndPassword
函數knex('user')
return
放在knex('user')
之前。
嗯,根據你分享的代碼,findByNameAndPassword好像是一個同步函數。 所以等待對控制器沒有幫助。 您可能希望將 findByNameAndPassword 更新為 Async 。 像這樣
import knex from '../db/db.config.js';
const User = {};
User.findByNameAndPassword = async (username, password) => {
try {
const rows = knex('user')
.where({ name: username })
.where({ password: password });
console.log(rows);
return rows;
catch(err) {
console.log(err);
}
}
export default User;
那應該這樣做。 我們在這段代碼中所做的是,我們試圖獲取 try 塊中的rows
。 如果失敗,catch 塊將記錄一個錯誤並為我們記錄錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.