Node.js Unhandled Promise에서 처리되지 않은 약속을 찾는 방법거부 경고?
버전 7의 Node.js에는 약속을 처리하기 위한 비동기/대기 구문 당이 있으며 현재 내 코드에서는 다음과 같은 경고가 꽤 자주 나타납니다.
(node:11057) UnhandledPromiseRejectionWarning: Unhandled promise
rejection (rejection id: 1): ReferenceError: Error: Can't set headers
after they are sent.
(node:11057) DeprecationWarning: Unhandled promise rejections are
deprecated. In the future, promise rejections that are not handled
will terminate the Node.js process with a non-zero exit code.
안타깝게도 캐치가 빠진 라인에 대한 언급이 없습니다.모든 시도/캐치 블록을 확인하지 않고 찾을 수 있는 방법이 있습니까?
프로세스의 수신 이벤트입니다.
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
// application specific logging, throwing an error, or other logic here
});
처리되지 않은 ES6 Promise 거부에 대한 전체 스택 추적을 표시하는 올바른 방법은 다음을 사용하여 Node.js를 실행하는 것입니다.--trace-warnings
플래그. 사용자 자신의 코드 내에서 거부를 가로챌 필요 없이 모든 경고에 대한 전체 스택 추적을 표시합니다.예:
node --vmdk-mdk app.js
다음을 확인합니다.trace-warnings
플래그는 당신의 이름 앞에 옵니다..js
file! 그렇지 않으면 플래그가 스크립트에 대한 인수로 해석되고 Node.js 자체에서 무시됩니다.
처리되지 않은 거부를 실제로 처리하려면(예: 로그를 기록하여) 내 모듈을 대신 사용하여 이를 지원하는 모든 주요 Promise 구현에 대해 처리되지 않은 거부를 단일 이벤트 핸들러로 모두 캡처할 수 있습니다.
그 모듈은 Bluebird, ES6 Promise, Q, WhenJS,es6-promise
,then/promise
처리되지 않은 거부 사양(문서의 전체 세부 정보)을 준수하는 모든 항목.
스택 추적을 사용한 로깅
더 유용한 오류 메시지를 찾고 있는 경우.노드 파일에 추가해 보십시오.충돌이 발생하는 전체 스택 추적을 표시해야 합니다.
process.on('unhandledRejection', (error, p) => {
console.log('=== UNHANDLED REJECTION ===');
console.dir(error.stack);
});
이 모듈을 통해 범인의 약속을 추적할 수 있었습니다. https://www.npmjs.com/package/trace-unhandled
설치하다
npm i trace-unhandled
코드에 포함
require('trace-unhandled/register');
@제레미 나도 같은 결과를 얻었습니다.reason
가 제공하는 변수
process.on('unhandledRejection', (reason, p) => {});
정의되지 않았고 내 코드에 아무것도 제공하지 않는 약속 거부가 있었다는 것을 알아내는 데 시간이 걸렸습니다. 일반적으로 다음과 같습니다.
new Promise((resolve reject) => {
const client = net.connect(options)
client.on("connect", () => {
resolve()
})
client.on("error", () => {
reject()
})
})
문제는 당신이reject
아무것도 없이, 흔적을 얻으려면, 당신은 이와 같은 오류를 제공해야 합니다.
new Promise((resolve reject) => {
const client = net.connect(options)
client.on("connect", () => {
resolve()
})
client.on("error", (err) => {
reject(err)
})
})
그리고 오류가 없으면 비어 있더라도 직접 하나를 제공할 수 있습니다. 스택 추적을 제공합니다.
reject(new Error())
오류가 발생한 위치를 찾아야 하는 경우 코드에서 다음을 찾습니다.Promise
거절로.
언급URL : https://stackoverflow.com/questions/43834559/how-to-find-which-promises-are-unhandled-in-node-js-unhandledpromiserejectionwar
'source' 카테고리의 다른 글
보간된 문자열 내에서 3진 연산자를 사용하는 방법은 무엇입니까? (0) | 2023.05.12 |
---|---|
jQuery 세트 인덱스 선택 (0) | 2023.05.12 |
홈 디렉토리 대신 다른 디렉토리로 기본 설정하는 방법 (0) | 2023.05.12 |
.NET은 이전 vb left(문자열, 길이) 함수와 동일합니다. (0) | 2023.05.12 |
Http 유틸리티.콘솔 응용 프로그램의 UrlEncode (0) | 2023.05.12 |