首頁 > 資料庫 > mysql教程 > 為什麼我的 Node.js 登入 API 無法使用 Promise?

為什麼我的 Node.js 登入 API 無法使用 Promise?

Patricia Arquette
發布: 2024-11-16 06:38:02
原創
709 人瀏覽過

Why Is My Node.js Login API Not Working with Promises?

Node.js Express 和Promises 未如預期運作

由於誤解,您的Node.js 登入API 表現出意外行為Promise如何與非同步操作互動。讓我們解決每個問題:

1。 Promise 不等待資料庫查詢

您的 findUser() 函數未傳回 Promise。相反,它會立即傳回 undefined,因為資料庫查詢是非同步的並且需要時間來執行。要解決此問題,您需要將回呼函數傳遞給query() 方法,該函數將在查詢完成時呼叫:

me.findUser = function(params, res) {
  var username = params.username;

  return new Promise(function (resolve, reject) {
    pool.getConnection(function (err, connection) {
      if (err) {
        reject(err);
      } else {
        connection.query('select ...', [username], function (err, rows) {
          connection.release();
          if (!err) {
            resolve(rows);
          } else {
            reject(err);
          }
        });
      }
    });
  });
}
登入後複製

2.錯誤處理程序未觸發

您的錯誤處理程序未觸發,因為承諾的reject() 方法從未被呼叫。在您的程式碼中,當發生錯誤時,您會從資料庫查詢的回呼中傳回 false。相反,您應該拒絕()帶有錯誤的承諾:

me.findUser = function(params, res) {
  // ...

  return new Promise(function (resolve, reject) {
    // ...

    connection.query('...', [username], function (err, rows) {
      connection.release();
      if (!err) {
        resolve(rows);
      } else {
        reject(err);
      }
    });
  });
}
登入後複製

修訂的路由文件

這是登入路由文件的更正版本,正確使用Promise:

module.exports = function(app) {

  app.post('/login/', async function(req, res, next) {

    try {
      // Find user in database
      var rows = await loginM.findUser(req.body, res);

      // Do something with the data
      var result = await loginC.doSomething(rows);

      console.log("Success");
    } catch (err) {
      console.log("Failed: " + err.message);
    }
  });
}
登入後複製

說明

透過使用Promise,您可以確保登入 API 中的每個步驟依序執行。 wait 關鍵字可讓程式碼在繼續之前等待 Promise 解析,確保下一步可以存取上一個步驟的資料。此外,使用 try/catch 可讓您處理過程中可能發生的任何錯誤。

以上是為什麼我的 Node.js 登入 API 無法使用 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板