[英]In the Promise of Javascript, why can't the error be passed to the next chain `.catch()`?
以下是一個例子:
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error + ' 1 ');
return error
}).catch(function(error) {
console.log(error + ' 2 ');
return error
})
代碼的結果是:
Error: test 1
可以看出,第二次catch
調用不起作用。 這是否意味着Promise無法使用catch
的鏈語法處理錯誤? 有沒有辦法將當前錯誤傳遞給下一個catch()
調用?
返回錯誤不會使它擊中下一個catch
。 您需要再次throw
錯誤:
promise.catch(function(error) {
console.log(error + ' 1 ');
throw error
}).catch(function(error) {
console.log(error + ' 2 ');
return error
})
-> Error: test 1
-> Error: test 2
您必須再次拋出錯誤,而不是僅返回錯誤對象:
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error + ' 1 ');
throw error
}).catch(function(error) {
console.log(error + ' 2 ');
return error
})
js沒有內部概念“這是一個錯誤對象所以拋出它” - 如果你的第一個catch()
then()
有一個then()
子句,那么操作就會被推遲到那個,就像這樣:
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error + ' 1 ');
return error
}).then(function(error) {
console.log(error + ' 2 ');
return error
})
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.