0
我想知道如果有藍鳥的方式承諾.catch
拋出的錯誤,然後處理一些沒有分支(嵌套承諾)的具體行動。藍鳥承諾並抓分支
說我有
doSomethingAsync()
.then(function (result) {
if (!result)
throw new CustomError('Blah Blah');
if (result == 0)
throw new CustomError2('Blah Blah Blah');
return result;
})
.then(function (result) {
console.log('Success, great!');
})
.catch(CustomError, function (error) {
// Oh CustomError!
return saveSomethingAsync();
})
.then(function (saved) {
// Should only be executed if an CustomError has been thrown
console.log("Let's try again");
return doSomethingAsync();
})
.catch(CustomError2, function (error) {
// Oh CustomError2!
})
.delay(15000) // Don't try again now !
.then(function() {
// Should only be executed if an CustomError2 has been thrown
console.log("Let's try again after some long delay");
return doSomethingAsync();
})
.catch(function (error) {
// Should catch all random errors of the chain
})
當我執行這個代碼,我得到一些行爲:
- 如果沒有錯誤拋出,我得到 「成功,太棒了!」並與「我們經過長期等待後重試」
- 如果CustomError拋出,我得到「讓我們再試一次」
- 如果CustomError2拋出,我得到「我們經過長期等待後重試」
我無法弄清楚這個流程發生了什麼。 應該很好寫這樣的東西,而不是將錯誤的特定代碼嵌套在新的承諾鏈中。
好吧,我明白,承諾鏈順序執行,我會去嵌套。 但是,我想繼續拋出Errors而不立即處理它們,如果在帶有嵌套promise的'.catch(CustomError,...)'中拋出一個錯誤,會發生什麼? – EthanSbbn 2015-04-02 11:42:16
與每個回調相同:'.catch()'返回的承諾被拒絕,並且鏈中的下一個事物將相應地執行。也許[此圖](http://stackoverflow.com/a/24663315/1048572)也有幫助 – Bergi 2015-04-02 13:49:16