[javascript] 처리되지 않은 약속 거부 소스 찾기 : TypeError : 약속에 대한 체인주기가 감지되었습니다.

Node.js의 Promise에서 처리되지 않은 거부 소스를 찾으려고합니다.

--async-stack-traces옵션을 사용하여 노드 버전 12로 업그레이드 하고 다음을 사용하여 청취했습니다.

process.on("unhandledRejection",( reason, promise ) => {
  console.log(reason);
  console.log(promise);
});

그러나 여전히 범인을 찾는 데 도움이되는 유용한 스택 추적이 표시되지 않습니다!

UnhandledPromiseRejectionWarning: TypeError: Chaining cycle detected for promise #<Promise>
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:89675) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 11)

노드 v10.10.0 실행



답변

유용한 스택 추적을 놓치면 다음과 같이 처리기에서 오류를 다시 발생시켜 노드를 새로 만들 수 있습니다.

process.on('unhandledRejection', (reason, p) => { throw reason });

이렇게하면 범인을 추적 할 수 있어야합니다.


답변

모든 제안에 감사드립니다. 최신 노드로 업그레이드하여 다시 한 번 시도했으며 12.14.1마침내 스택 추적을 표시 할 수있었습니다.

나는 다음 node --async-stack-traces myScript.js과 함께 사용 했다 :

process.on('unhandledRejection', (reason, p) => {
  console.log(reason);
});

그리고 오류를 추적했습니다.


답변

이 코드에 대한 좋은 스택 추적을 찾으려면
const cyclic = Promise.resolve().then(() => cyclic);
이 코드를 파일에 넣고 prromise_cycle.js관리자와 함께 실행하여 디버깅하십시오.

플래그가 Pause on caught exceptions활성화 된 Chrome DevTools에서 디버깅 한 다음 파일이있는 전체 스택 추적을 볼 수 있습니다

여기에 이미지 설명을 입력하십시오


답변