then 和 catch 只要不报错,返回的都是一个fullfilled状态的promise
关于这句话的理解,这样子理解对吗?
Promise.resolve()
.then(() => {
console.log(1); //打印1
throw new Error("error"); //抛错,走catch()
})
.catch(() => {
console.log(2); //打印2 未抛错,返回一个fullfilled的promise 继续走then()
})
.then(() => {
console.log(3); //打印3 返回一个fullfilled的promise
});
Promise.resolve()
.then(() => {
console.log(1); //打印1
throw new Error("error"); //抛错,走catch()
})
.catch(() => {
console.log(2); //打印2 抛错,返回一个rejected的promise 继续走catch()
throw new Error("error");
})
.catch(() => {
console.log(3); //打印3 未抛错,返回一个fullfilled的promise
});
还有就是后面所有的的then(),catch,只要promise执行resolve()或reject()一次,都能按情况执行下去吗
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的理解是对的,以下是补充说明:
那then,catch方法返回的promise的状态到底是失败还是成功?这里首先说明一下,catch()方法的实现,其实是基于then()的基础上,把then的第一个回调函数设置为undefined。因为then的第二个参数回调函数就是捕获错误的。具体源码大致实现如下:
所以,这里我们具体分析一下,then()执行完,后续怎么知道它返回的是rejected的promise还是fullfilled的promise?这里看具体源码大致实现,这里参考:https://segmentfault.com/a/11...
总结一下:
(1).then()方法的成功或者失败回调函数,只要里面throw错误,得到的就是一个rejected的promise。
(2).then()方法的成功或者失败回调函数,执行得到的结果是一个非promise的普通值,那then()方法执行完得到的就是一个fullfilled的promise
(3).then()方法的成功或者失败回调函数,执行得到的返回结果还是一个promise,那就根据返回的promise的状态而决定,返回的到底是fullfilled还是rejected的promise
例子