Versprechen reject() bewirkt, dass "nicht Erfasste (Versprechen)" Warnung
Einmal ein Versprechen reject()
callback aufgerufen wird, wird eine Warnmeldung "Uncaught (Versprechen)" erscheint in der Chrome-Konsole. Ich kann nicht umbrochen, mein Kopf herum, der Grund hinter ihm ist, noch wie man es loswerden.
var p = new Promise((resolve, reject) => {
setTimeout(() => {
var isItFulfilled = false
isItFulfilled ? resolve('!Resolved') : reject('!Rejected')
}, 1000)
})
p.then(result => console.log(result))
p.catch(error => console.log(error))
Achtung:
Edit:
Fand ich heraus, dass, wenn die onRejected
handler nicht explizit die .then(onResolved, onRejected)
Methode, JS wird automatisch eine implizite. Es sieht wie folgt aus: (err) => throw err
. Die automatisch generierten Prozedur wird throw in der Reihe.
Referenz:
Wenn IsCallable(onRejected) " false, dann
Lassen Sie onRejected "Werfer".
http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen
InformationsquelleAutor Yevgeny Kozlov | 2017-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies geschieht, weil Sie nicht an ein catch-handler an das Versprechen, zurück durch die erste
then
Methode, die deshalb ohne hf, wenn das Versprechen ablehnt. Sie tun haben eine für das Versprechenp
in der letzten Zeile, aber nicht für die angekettet Versprechen, zurück durch diethen
Methode, in der Zeile vor.Als Sie richtig Hinzugefügt, in den Kommentaren unten, wenn ein catch-handler ist nicht vorhanden (oder es ist nicht eine Funktion), die standardmäßig wird werfen der Fehler. Innerhalb ein Versprechen Kette kann dieser Fehler abgefangen werden, die Linie nach unten mit einem
catch
callback-Methode, aber wenn keiner da ist, der JavaScript-engine werden mit den Fehler-wie bei jedem anderen nicht erfassten Fehler, und wenden Sie die Standardprozedur in einem solchen Fall, die Ergebnisse in der Ausgabe sehen Sie in der console.Um dies zu vermeiden, die Kette
.catch
Methode, um das Versprechen zurückgegeben von der erstenthen
wie diese:If IsCallable(onRejected)
ist falsch, dann Lassen SieonRejected
"Werfer". Das sieht ungefähr so aus:arg => throw arg
Eine leere onRejected handler() => {}
können dieses Verhalten außer Kraft setzen. Abernull
nicht. ref: ecma-international.org/ecma-262/6.0/...Du bist willkommen, und schön Verweis auf die EcmaScript-Spezifikationen! Ich führte diese auf meine Antwort der Vollständigkeit halber Willen. Super!!!
Ich habe es gefesselt und es gibt mir immer noch die nicht abgefangene Fehlermeldung
dann haben Sie wahrscheinlich etwas anderes. Wenn Sie erforscht haben, das Problem (mit debugging, der Suche nach ähnlichen Fragen, ...), dann postet eine neue Frage.
InformationsquelleAutor trincot