Ich versuche, die Quelle einer unbehandelten Ablehnung eines Versprechens in Node.js zu finden
Ich habe versucht, mit der --async-stack-traces
Option auf Node Version 12 zu aktualisieren und sie mit folgenden Funktionen abzuhören:
process.on("unhandledRejection",( reason, promise ) => {
console.log(reason);
console.log(promise);
});
Aber ich sehe immer noch keine hilfreiche Stapelspur, die mir hilft, den Schuldigen zu finden!
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)
Ausführen von Node v10.10.0
javascript
node.js
promise
v8
d -_- b
quelle
quelle
const cyclic = Promise.resolve().then(()=>cyclic);
Suchen Sie also nicht nach einer unbehandelten Ablehnung von Versprechungen, diese befindet sich im internen Code des Knotens.npm i bluebird
und Hinzufügenconst Promise = require('bluebird')
des Codes kann zu einer detaillierteren Fehlermeldung führen--trace-warnings
Wenn Sie versuchen, einen Knoten mit nicht behandelten Ablehnungen auszuführen, werden Warnungen angezeigt, die Sie verfolgen könnenAntworten:
Wenn Sie eine hilfreiche Stapelverfolgung verpassen, können Sie den Knoten dazu bringen, eine neue zu erstellen, indem Sie Ihren Fehler wie folgt erneut in Ihren Handler werfen:
Auf diese Weise sollten Sie in der Lage sein, den Täter aufzuspüren.
quelle
danke für alle vorschläge. Ich habe es noch einmal versucht, indem ich auf den neuesten Knoten aktualisiert habe,
12.14.1
und konnte ihn schließlich dazu bringen, den Stack-Trace anzuzeigen:Ich habe
node --async-stack-traces myScript.js
in Verbindung mit verwendet:Und es hat den Fehler aufgespürt.
quelle
Um eine gute Stapelverfolgung für diesen Code zu finden, habe
const cyclic = Promise.resolve().then(() => cyclic);
ich diesen Code in die Datei eingefügtprromise_cycle.js
und mit dem Inspektor ausgeführt, um ihn zu debuggen.Ich debugge es in Chrome DevTools mit
Pause on caught exceptions
aktiviertem Flag und sehe dann den gesamten Stack-Trace mit meiner Datei daraufquelle