请问Promise 中reject 和 catch 的处理上有什么区别?
如题,请问下面的代码有什么区别呢?我隐约记得在哪里看到过好像是一回事,只是写法上的区别
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所抛出的异常,而第二种是会处理的
第一种:
第二种:
@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()里面。