2016-08-01 8 views
0

約束事の機能であるthenで発生するエラーをどう対処しますか?例えば機能のエラーを約束します

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'); 
} 

、どのように私はエラーを投げthis._parseに対処するのですか?私は約束のcatchの機能はrejectハンドラを扱うと思った。 thenにスローされたエラーも処理しますか?

+1

O.T.しかし関連しています: 'callback'を渡す必要はありません。 'getLocationId(lat、lon、errorHandler)'の代わりに 'getLocationId(lat、lon).catch(errorHandler)'と全く同じ効果が得られます。 –

答えて

0

.then()ハンドラでスローされた例外は、約束インフラストラクチャによって自動的に捕捉され、現在の約束を拒否された約束に変えます。チェーンは次の.catch()ハンドラにジャンプし、例外はエラー拒否の理由になります。ここで

は例です:

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" 
}); 
関連する問題