在您的代码中,为 findUser 函数创建的 Promise 执行立即执行,但函数本身是异步的。因此,在 findUser 检索数据之前,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 在使用 Express 和 Promises 的 Node.js 中过早解析?的详细内容。更多信息请关注PHP中文网其他相关文章!