So finden Sie die Versprechungen sind in unbehandelte Node.js UnhandledPromiseRejectionWarning?
Node.js ab version 7 hat async/await-syntaktische Zucker für die Handhabung verspricht und jetzt in meinem code die folgende Warnung kommt sehr oft:
(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.
Leider gibt es keine Referenz auf die Zeile, wo der Haken ist, fehlt.
Gibt es eine Möglichkeit es zu finden ohne zu prüfen, alle try/catch-block?
Sie konnte die Bluebird Versprechen, Bibliothek und es würde wahrscheinlich geben Ihnen einen stack-trace.
Vielleicht registrieren zu Knoten
Wenn die zwei vorherigen Kommentare nicht helfen, dann
hi, die Nachrichten hilft sicher bei der Suche, wo im code der Fehler ist, btw es ist nicht so einfach wie zu wissen, die Linie.
Es stellt sich heraus, es war eine situation, wo eine async-Funktion zum auslösen einer Fehler-jene, die internen Knoten verspricht für async-Funktionen nicht verwenden, Bluebird, je nachdem Bluebird hilft nicht in diesem Szenario.
Vielleicht registrieren zu Knoten
unhandledRejection
event helfen? Siehe die docs. Der callback erhält die Error
Objekt und der eigentliche Promise
, und ich glaube, die Error
Objekt könnte ein stack-trace.Wenn die zwei vorherigen Kommentare nicht helfen, dann
Can't set headers after they are sent.
sollten Sie einen Anhaltspunkt geben, wo in deinem code könnte es passiert sein (also irgendwo setzen, Header, nach dem Header würde sich schon geschickt - vermutlich, weil ein Versagen im Verständnis von asynchronem code, aber das ist eine Vermutung)hi, die Nachrichten hilft sicher bei der Suche, wo im code der Fehler ist, btw es ist nicht so einfach wie zu wissen, die Linie.
Es stellt sich heraus, es war eine situation, wo eine async-Funktion zum auslösen einer Fehler-jene, die internen Knoten verspricht für async-Funktionen nicht verwenden, Bluebird, je nachdem Bluebird hilft nicht in diesem Szenario.
InformationsquelleAutor user1658162 | 2017-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
hören
unhandledRejection
Ereignis des Prozesses.error.stack
(oder im obigen Beispielreason.stack
) gibt Ihnen die volle stack-trace des Fehlers.Vielen Dank für die Umsetzung
process.on
eher alsserver.on
wie in so vielen anderen Beispielen, die ich gefunden habeIch wünschte, ich könnte sagen, das hat funktioniert, aber es funktioniert nicht. Ich bin auf Knoten 8.9.4.
Ich habe versucht den obigen code und bekam undefined für beide Grund, und p? Irgendwelche Vorschläge? "Unbehandelte Ablehnung an: Versprechen { Status: "abgelehnt", Grund: undefined } Grund: "undefined "
Ich fügte diesen code am Anfang des Knotens
app.js
Datei und nichts wird protokolliert, leider. Knotenv10.13.0
.InformationsquelleAutor cuixiping
Den richtige Weg zu zeigen, einen vollständigen stacktrace für unbehandelte ES6 Versprechen absagen, laufen Node.js mit der
--trace-warnings
Flagge. Dies zeigt den vollständigen stacktrace für jede Warnung, die zimmerreserviereung, ohne das abfangen der Ablehnung von Ihrem eigenen code. Zum Beispiel:Sicherzustellen, dass die
trace-warnings
Flagge kommt vor den Namen Ihres.js
Datei! Ansonsten, die Flagge interpretiert werden, als ein argument an das Skript, und es wird ignoriert Node.js selbst.Wenn Sie wollen, um tatsächlich Griff unbehandelte absagen (zB. durch protokollieren), dann möchten Sie vielleicht, um meine
unbehandelte-Ablehnung
Modul statt, die fängt alle nicht behandelten Ablehnungen für alle großen Versprechungen Umsetzung, die es unterstützt, mit einem einzigen Ereignis-handler.Dass das Modul unterstützt Bluebird, ES6 Promises, Q, WhenJS,
es6-promise
,then/promise
, und alles, was ist, entspricht jeder der nicht behandelte Ablehnung Spezifikationen (details in der Dokumentation).Ich sehe keine Ausgabe, die zeigt, wo die unbehandelte Versprechen Problem ist.
Ich fügte hinzu, diese zu
package.json
start-script, und nichts war protokolliert, leider. Knotenv10.13.0
.Sicherstellen, dass die Flagge an der richtigen Stelle in Ihrem Befehl. Ich habe gerade Hinzugefügt ein update für die Antwort, zu betonen, dass es braucht, um zu gehen, bevor das Skript name.
Ich habe gerade versucht diese, alles, was ich bekam, war der stack-trace von emitPendingUnhandledRejections, und ich bin mir ziemlich sicher, dass der Befehl richtig war, wie ich war nicht immer der stack-trace, dass vor. Nicht sicher, ob dies hilfreich ist in diesen Fällen aber eine faire versuchen
InformationsquelleAutor Sven Slootweg
Protokollierung von stack-trace -
Wenn Sie auf der Suche nach mehr hilfreiche Fehlermeldung. Versuchen Sie, diese zu Ihrem Knoten Datei. Es sollte anzeigen, das volle stack-trace, wo Ihr Absturz passiert ist.
InformationsquelleAutor joshuakcockrell