CNode

请问Promise 中reject 和 catch 的处理上有什么区别?

问答
Lleonzhao发布于10 年前最后回复9 年前8 回复16253 浏览0 收藏

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

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

回复 (8)

I
i5ting#1·10 年前

异常分2种

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

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

L
leonzhao#3·10 年前

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

C
CoderIvan#4·10 年前

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

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

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

C
CoderIvan#5·10 年前

第一种: untitled1.png

第二种: untitled2.png

L
leonzhao#6·10 年前

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

F
fangker#7·9 年前

谢谢,理解了

W
webbought#8·9 年前
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()里面。

参与回复
登录后即可参与回复。登录