首頁 > 資料庫 > mysql教程 > 為什麼我的 Promise 在使用 Express 和 Promises 的 Node.js 中過早解析?

為什麼我的 Promise 在使用 Express 和 Promises 的 Node.js 中過早解析?

DDD
發布: 2024-11-17 15:32:02
原創
930 人瀏覽過

Why Does My Promise Resolve Prematurely in Node.js with Express and Promises?

Node.js Express 和Promise:解決不可預測的行為

Unwait Promise 的原因

在您的程式碼中,為findUser 函數建立的Promise 執行立即執行,但函數本身是非同步的。因此,在 findUser 檢索資料之前,promise 會提前解析。

實作正確的 Promise 執行

修改 findUser 函數以傳回 Promise,而不是嘗試同步回傳值。以下是範例:

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

    return new Promise(function (resolve, reject) {

      pool.getConnection(function (err, connection) {
        if (err) {
          reject(err);
          return;
        }

        connection.query('select Id, Name, Password from Users ' +
            'where Users.Name = ?', [username], function (err, rows) {
            connection.release();
            if (err) {
                reject(err);
            } else {
                resolve(rows);
            }
        });
      });
    });
}
登入後複製

錯誤處理

出現「error handler secondary」訊息是因為當 findUser 遇到錯誤時,第二個 Promise 中的錯誤處理程序被拒絕。若要解決此問題,請修改程式碼如下:

promise.then(function(data) {
            return new Promise(function (resolve, reject) {
                loginC.doSomething(data);

                if (success) {
                    console.log("Success 2");
                    resolve(data);
                } else {
                    console.log("Failed 2");
                    reject("Error in doSomething");
                }
            });
        }).catch(function (reason) {
            console.log("Error in findUser: " + reason);
        });
登入後複製

附加說明

  • 確保在連線回呼中處理資料庫連線錯誤。
  • 避免依賴非同步操作的同步方法。
  • Promise 用於連結非同步操作和處理結果可靠。

以上是為什麼我的 Promise 在使用 Express 和 Promises 的 Node.js 中過早解析?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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