ich Oboe.js bin mit einer wirklich, wirklich großen JSON-DateiUnhandle Versprechen Ablehnung in asynchronen Versprechen
const promises = [];
oboe('http://domain/my-file.js')
.node('items.*', item => {
// parseItem() returns a rejected Promise because of invalid JSON items
promises.push(parseItem(item));
})
.done(() => {
Promise.all(promises).then(() => {
doSomething();
});
})
Aber mein Browser-Konsole wird mit Uncaught (in promise)
überflutet zu analysieren. Das gleiche geschieht, wenn Sie ein Versprechen in einem setTimeout()
wie
const promises = [];
setTimeout(() => {
promises.push(Promise.reject());
}, 500);
// some time in the future
Promise.all(promises);
schreibt Was ist wirklich seltsam: moderner Browser anders verhalten. In Firefox Developer Edition funktioniert alles ohne die Fehlermeldungen und in Chrome werde ich mit Uncaught (in promise)
überflutet. In Chrome erhalten Sie die Nachricht sofort, wenn Sie Promise.reject();
ohne einen Haken schreiben. In Firefox und Safari passiert nichts.
Also, was ist die Lösung dafür? Ignorieren der Nachricht? Ich meine, wenn dieses Verhalten wirklich in der offiziellen Promise-Spezifikation ist, dann machen Versprechen in asynchronem Code für mich keinen Sinn.
Es gibt derzeit zwei Lager von Menschen in Bezug auf ES6 verspricht. Ein Camp (inklusive Chrome-Devs) ist der Ansicht, dass die Art, wie Sie es verwenden, ein Missbrauch ist. Das Verhalten, das Sie erleben, ist nicht in der Spezifikation für Versprechungen, obwohl es mehrere Vorschläge dafür gibt, weil das andere Lager immer wieder sagt, dass Anwendungsfälle wie Ihre relevant sind. Leider, einige der Browser hinzugefügt unbehandelt Versprechen Ablehnung Protokollierung trotz der Mangel an Spezifikationen und trotz des Push-Back dagegen. –
@MicahZoltu um fair zu sein, sind die Camps sogar unter Chrome-Devs aufgeteilt. –
@MicahZoltu danke für die Klarstellung. Im Moment ist es wirklich verwirrend, welche Implementierung die richtige ist. – LongFlick