如果promise有多个then回调?

如果promise有多个then回调前面的回调中出现的错误,那么后边的then还会继续执行吗?为什么?

阅读 4.2k
2 个回答

分情况,
如果catch在最后,中途then中报错后面代码就不会执行。

Promise.resolve(1).then(res=>{console.log(res); return res+x}).then(res2=>{console.log(res2),console.log(22)}).catch(err=>{console.log(err);return err})
结果:
//res:1 
//err:ReferenceError: x is not defined at eval (HelloWorld.vue?18db:27)

如果catch在中间,前面的then中报错后,catch还是返回一个promise所以后面调用then还是会执行。

Promise.resolve(1).then(res=>{console.log(res); return res+x}).catch(err=>{console.log(err);return err}).then(res2=>{console.log(res2),console.log(22)})
结果:
//res:1 
//err:ReferenceError: x is not defined at eval (HelloWorld.vue?18db:27)
//res2:ReferenceError: x is not defined  at eval (HelloWorld.vue?18db:27)
//22

关于promise详细可以看一下:http://es6.ruanyifeng.com/#do... 部分

不会,出现错误会执行下面最近的catch。因为设计如此

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题