> 데이터 베이스 > MySQL 튜토리얼 > Express 및 Promise를 사용하여 Node.js에서 약속이 조기에 해결되는 이유는 무엇입니까?

Express 및 Promise를 사용하여 Node.js에서 약속이 조기에 해결되는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-17 15:32:02
원래의
924명이 탐색했습니다.

Why Does My Promise Resolve Prematurely in Node.js with Express and Promises?

Node.js Express 및 Promises: 예측할 수 없는 동작 처리

기다리지 않는 Promise의 원인

코드에서 findUser 함수를 위해 생성된 Promise가 실행됩니다. 즉시 실행되지만 함수 자체는 비동기적입니다. 따라서 findUser가 데이터를 검색하기 전에 Promise가 조기에 해결됩니다.

적절한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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