첫 번째 약속의 '실패' 출력 전에 두 번째 약속 오류 처리기가 실행되는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-14 09:45:02
원래의
644명이 탐색했습니다.

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

Node.js Express 및 Promise가 예상대로 작동하지 않음

findUser() 완료를 기다리지 않는 첫 번째 Promise

제공된 코드에서 첫 번째 Promise는 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
                    }
                });
            }
        });
    });
}
로그인 후 복사

대신 오류 처리기 두 번째가 출력되는 이유 실패

첫 번째 약속이 거부되었기 때문에 두 번째 약속에 대한 오류 핸들러가 호출됩니다. 그러나 console.log("Failed"); .then() 블록 내부에서 오류가 발생하기 때문에 오류 처리기의 줄이 실행되지 않습니다.

첫 번째 약속의 거부를 올바르게 처리하려면 .then() 대신 .catch()를 사용하세요.

promise.then(function(data) {
    return new Promise(...);
}, function (reason) {
    console.log("Failed");
});
로그인 후 복사

위 내용은 첫 번째 약속의 '실패' 출력 전에 두 번째 약속 오류 처리기가 실행되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿