请问Promise 中reject 和 catch 的处理上有什么区别?
发布于 8 年前 作者 leonzhao 15571 次浏览 来自 问答

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

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

异常分2种

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

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

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

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

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

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

第一种: untitled1.png

第二种: untitled2.png

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

谢谢,理解了

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()里面。

回到顶部