在Javascript的承诺中,为什么不能将错误传递给下一个链`.catch()`?

Han*_*Sun 3 javascript asynchronous promise ecmascript-6

以下是一个例子:

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
})
Run Code Online (Sandbox Code Playgroud)

代码的结果是:

Error: test 1 
Run Code Online (Sandbox Code Playgroud)

可以看出,第二次catch调用不起作用.这是否意味着Promise无法使用链式语法来处理错误catch?有没有办法将当前错误传递给下一个catch()调用?

Jam*_*lly 7

返回错误不会让它击中下一个catch.您需要throw再次出错:

promise.catch(function(error) {
  console.log(error + ' 1 ');
  throw error
}).catch(function(error) {
  console.log(error + ' 2 ');
  return error
})
Run Code Online (Sandbox Code Playgroud)
-> Error: test 1 
-> Error: test 2 
Run Code Online (Sandbox Code Playgroud)