在提供的代码中,第一个Promise 不会等待 findUser() 返回后再继续,因为:
将数据库查询包装在返回 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中文网其他相关文章!