首页 >数据库 >mysql教程 >为什么第二个 Promise 错误处理程序在第一个 Promise 的'失败”输出之前执行?

为什么第二个 Promise 错误处理程序在第一个 Promise 的'失败”输出之前执行?

Linda Hamilton
Linda Hamilton原创
2024-11-14 09:45:02743浏览

Why is the Second Promise Error Handler Executed Before the First Promise's

Node.js Express 和 Promise 未按预期运行

第一个 Promise 不等待 findUser() 完成

在提供的代码中,第一个Promise 不会等待 findUser() 返回后再继续,因为:

  • .findUser() 使用回调函数异步查询数据库。
  • 回调不用于解析承诺。相反,promise 是用行来解析的,这在创建promise 时是未定义的。

解决方案:

将数据库查询包装在返回 Promise 并解析的函数中带有查询结果的 Promise:

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

    return new Promise(function (resolve, reject) {
        pool.getConnection(function (err, connection) {
            console.log("Connection ");

            if (err) {
                console.log("ERROR 1 ");
                res.send({"code": 100, "status": "Error in connection database"});
                reject(err); // Reject the promise with the error
            } else {
                connection.query('select Id, Name, Password from Users ' +
                    'where Users.Name = ?', [username], function (err, rows) {
                    connection.release();
                    if (!err) {
                        resolve(rows); // Resolve the promise with the query result
                    } else {
                        reject(err); // Reject the promise with the error
                    }
                });
            }
        });
    });
}

为什么第二个错误处理程序被输出而不是失败

第二个 Promise 的错误处理程序被调用,因为第一个 Promise 被拒绝。但是,console.log(“失败”);错误处理程序中的行未执行,因为 .then() 块内抛出错误。

要正确处理第一个 Promise 的拒绝,请使用 .catch() 而不是 .then():

promise.then(function(data) {
    return new Promise(...);
}, function (reason) {
    console.log("Failed");
});

以上是为什么第二个 Promise 错误处理程序在第一个 Promise 的'失败”输出之前执行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn