请问Promise 中reject 和 catch 的处理上有什么区别?
 发布于 9 年前  作者 leonzhao  16091 次预览  最后一次回复是 8 年前  来自 问答 

如题,请问下面的代码有什么区别呢?我隐约记得在哪里看到过好像是一回事,只是写法上的区别

auto.getData().then(function (results) {
     res.send(results);
}, next);
auto.getData().then(function (results) {
     res.send(results);
}).catch(next);
8 回复
i5ting

异常分2种

  • then里的第二个参数,就近捕获的原则
  • 全局异常,所有流程异常都捕获,所以如果粒度不是很细,那么处理起来很麻烦
leonzhao

@i5ting 我这个代码里的区别在于reject是就近捕获,catch捕获全局异常?不是很明白啊,桑总

leonzhao

另外我把或有的异常通过next进行统一的错误/异常处理有没有什么问题呢?

CoderIvan

粗略看了下,认为是这样的

相同的是,auto.getData如果正常,执行then,否则执行next

不同的是,第一种next是不会处理res.send所抛出的异常,而第二种是会处理的

CoderIvan

第一种: untitled1.png

第二种: untitled2.png

leonzhao

@CoderIvan 谢谢,这个图一目了然

fangker

谢谢,理解了

webbought
auto.getData().then(function (results) {
     res.send(results);
}, next);

这种写法,next函数只会处理getData中的reject时的异常情况。

auto.getData().then(function (results) {
     res.send(results);
}).catch(next);

这种写法,catch会捕捉到在它之前的promise链上的代码抛出的异常,不仅getData,还包括then()里面。