簡體   English   中英

在Javascript的承諾中,為什么不能將錯誤傳遞給下一個鏈`.catch()`?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM