簡體   English   中英

javascript - 等待不等待

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM