2016-04-09 2 views
5

Ich möchte nichts tun, wenn das Versprechen abgelehnt wird, wie getPromise().then(foo=>{});. Warum ist es ein Fehler in Chrome?Warum ist es ein Fehler, ein abgelehntes Versprechen in Chrome zu ignorieren?

(new Promise((resolve, reject)=>{reject()})) 
Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: undefined} 
VM3250:2 Uncaught (in promise) undefined 

Auf Knoten und Firefox ist es OK, den zurückgewiesenen Teil zu ignorieren.

Antwort

2

Promise Ablehnung ist wie eine nicht abgefangene Ausnahme. wenn Sie Ausnahme ignorieren wollen - es fangen, aber nicht behandeln, hier gilt das gleiche - fügen .catch Aussage, aber nichts tun

Promise.reject(new Error('bad..')).catch(e => {})

Ich würde das nicht empfehlen jedoch, als Versprechen für einen Grund ablehnen Vielleicht möchten Sie also eine Art Verarbeitungslogik hinzufügen

1

Ein Versprechen abzulehnen bedeutet im Grunde, dass etwas Schlimmes passiert ist und dass Sie es mit einem Anruf an catch behandeln sollten. Wenn Sie ein Versprechen ohne ein catch mit ablehnen, wird eine Ausnahme (genauer gesagt, eine nicht behandelte Ablehnung)

var a = (new Promise((resolve, reject) => { 
    reject("my error") 
})).catch((err) => { 
    console.error(err) 
}) 

wirft Ich vermute, es eine Spezifität von V8 ist, wenn dies nur unter Chrome geschieht, aber es macht Sinn für mich

3

Ohne einen Verweigerungsverweigerungshandler, wirft Chrom den Grund der Ablehnung asynchron, das keinen JavaScript-Prozess auswirkt, druckt nur den Grund zur Konsole. Wenn Sie sich darüber ärgern, müssen Sie einen Handler hinzufügen, z. Promise.reject(reason).catch(reason => {}).

UPDATE: Warum ist ein Fehler? Dies liegt möglicherweise daran, dass die Zurückweisung üblicherweise als Ausnahme betrachtet wird (ein Fehler).

P.S. Ihre "Frage" sieht eher wie ein Feedback als eine Frage aus. Ich persönlich bevorzuge es, den Grund als Fehler zu verstehen.

+0

Diese Ausnahme hat Auswirkungen, wenn ich 'Promise' in Erweiterung, Inhaltsskript verwende. Die gesamte Erweiterung wird mit nur einer Zeilenmeldung abgebrochen: 'Uncaught (in promise) undefined' – Zen

Verwandte Themen