제공된 코드에서 첫 번째 Promise는 Promise는 계속 진행하기 전에 findUser()가 반환될 때까지 기다리지 않습니다. 왜냐하면:
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 } }); } }); }); }
첫 번째 약속이 거부되었기 때문에 두 번째 약속에 대한 오류 핸들러가 호출됩니다. 그러나 console.log("Failed"); .then() 블록 내부에서 오류가 발생하기 때문에 오류 처리기의 줄이 실행되지 않습니다.
첫 번째 약속의 거부를 올바르게 처리하려면 .then() 대신 .catch()를 사용하세요.
promise.then(function(data) { return new Promise(...); }, function (reason) { console.log("Failed"); });
위 내용은 첫 번째 약속의 '실패' 출력 전에 두 번째 약속 오류 처리기가 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!