코드에서 findUser 함수를 위해 생성된 Promise가 실행됩니다. 즉시 실행되지만 함수 자체는 비동기적입니다. 따라서 findUser가 데이터를 검색하기 전에 Promise가 조기에 해결됩니다.
동기적으로 값을 반환하려고 시도하는 대신 Promise를 반환하도록 findUser 함수를 수정하세요. 예는 다음과 같습니다.
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); } }); }); }); }
"두 번째 오류 처리기" 메시지는 findUser에 오류가 발생하면 두 번째 약속의 오류 처리기가 거부되기 때문에 나타납니다. 이 문제를 해결하려면 다음과 같이 코드를 수정하세요.
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); });
위 내용은 Express 및 Promise를 사용하여 Node.js에서 약속이 조기에 해결되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!