2016-08-01 15 views
0

Wie gehen wir mit Fehlern um, die in der then Funktion eines Versprechens auftreten?Verspricht Fehler in der Funktion

getLocationId(lat, lon, callback) 
{ 
    let self = this; 

    return this._geocoder.reverse({lat: lat, lon: lon}) 
     .then(this._parse) 
     .catch(function(err) { 
      callback(err); 
     }); 
} 

_parse(res) 
{ 
    if (res.length < 1) 
     throw new Error('No results from Maps API'); 

    let value = res[0].administrativeLevels; 

    if (!value || value.length < 1) { 
     throw new Error('No administrative levels available'); 
    } 

    if ('level2long' in value) 
     return value.level2long; 
    if ('level1long' in value) 
     return value.level1long; 

    throw new Error('No suitable location found'); 
} 

Zum Beispiel: Wie kann ich mit this._parse werfen einen Fehler umgehen? Ich dachte, die catch Funktion des Versprechens behandelt nur die reject Handler. Behandelt es auch Fehler, die in der then geworfen werden?

+1

O. T. aber verwandt: Es ist nicht notwendig, "Callback" zu übergeben. Statt 'getLocationId (lat, lon, errorHandler)' wird mit 'getLocationId (lat, lon) .catch (errorHandler)' genau der selbe Effekt erreicht. –

Antwort

0

Eine Ausnahme, die in einem beliebigen -Handler ausgelöst wird, wird automatisch von der Infrastruktur des Versprechens erfasst und wandelt die aktuelle Versprechenskette in ein abgelehntes Versprechen um. Die Kette springt dann zum nächsten Handler .catch(), wo die Ausnahme der Grund für den Fehlerverweis ist.

Hier ist ein Beispiel:

Promise.resolve().then(function() { 
    throw "foo"; 
}).then(function() { 
    console.log("in 2nd .then() handler");  // will not get here 
}).catch(function(err) { 
    console.log(err);       // will show "foo" 
});