关于promise化的一些疑问,哪位老哥可以帮忙看看?

新手上路,请多包涵

前端菜鸟er,最近在看promise相关概念的时候,有了一下疑问:
//then的使用方法

promise.then(onCompleted, onRejected);

//catch的使用方法

promise.catch((error)=>{
    reject(error)
})

我不明白的是在then()里面的onRejected函数和catch中的reject有啥区别?

我个人理解的话主要是以下区别:
then是指进入了fulfilled后执行的代码,而onRejected仅仅是针对then中所执行的任务失败后才会调用;而 catch是指进入了rejected函数后执行的代码,也就是说reject是在这种状况下才会调用

但是去看官方文档贴的图发现,fufilled和rejected二者都可以执行then,所以我有点晕了...
望老哥可以指点一下!感谢

阅读 1.4k
2 个回答

其实还是有点区别的,在于写不写then的第二个参数

p.then(() => {
    a.c() //a报错
}, () => {
    // p的报错
    // throw c报错
}).catch(err => {
    // a 和 c的报错
})

这个在开发过程中错误容易引起理解错误,以为是p的错误,其实还包含了a的调用错误

p.then(() => {
    a.c() //a报错
}).catch(err => {
    // p 和 a的报错
})

因为一开始只有 then 啊,第一个参数处理正常流程,第二个参数处理异常流程。但你想只处理错误怎么办?我只关心正常流程的时候可以第二个参数不传,挺优雅,但只关心错误的时候第一个就要传 null ,不优雅,不优雅。

于是你就有了 .catch 。

完。

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