Próbuję znaleźć źródło nieobsługiwanego odrzucenia z obietnicy w Node.js
Próbowałem uaktualnić do Węzła w wersji 12, używając tej --async-stack-traces
opcji i nasłuchując, używając:
process.on("unhandledRejection",( reason, promise ) => {
console.log(reason);
console.log(promise);
});
Ale nadal nie widzę żadnego pomocnego śladu stosu, który pomógłby mi znaleźć winowajcę!
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)
Uruchamianie węzła 10.10.0
javascript
node.js
promise
v8
d -_- b
źródło
źródło
const cyclic = Promise.resolve().then(()=>cyclic);
, więc nie szukaj nieobsługiwanego odrzucenia obietnicy, to jest w wewnętrznym kodzie węzła.npm i bluebird
i dodanieconst Promise = require('bluebird')
do kodu może dać bardziej szczegółowy komunikat o błędzie--trace-warnings
, nieobsługiwanym odrzuceniom towarzyszą ostrzeżenia, które możesz prześledzićOdpowiedzi:
Jeśli pominiesz przydatne śledzenie stosu, możesz zmusić węzeł do utworzenia nowego, ponownie zgłaszając błąd w module obsługi:
W ten sposób powinieneś wytropić winowajcę.
źródło
dzięki za wszystkie sugestie. Próbowałem jeszcze raz, uaktualniając do najnowszego węzła
12.14.1
i wreszcie udało mi się go wyświetlić, aby wyświetlał ślad stosu:Użyłem
node --async-stack-traces myScript.js
w połączeniu z:I wyśledził błąd.
źródło
Aby znaleźć dobre dane śledzenia stosu dla tego kodu
const cyclic = Promise.resolve().then(() => cyclic);
, umieszczam ten kod w plikuprromise_cycle.js
i uruchamiam z inspektorem, aby go debugować.Debuguję go na Chrome DevTools z
Pause on caught exceptions
włączoną flagą , a następnie widzę ślad całego stosu z moim plikiem na nimźródło