then 函数实现逻辑中 fn2 默认值应为 (e) => { throw e }

来源:8-20 手写 Promise-then 的链式调用

BryanLi93

2022-03-07

你好,双越老师:

前提:then 函数实现逻辑中,很多同学提出过,state === ‘fulfilled’ 处理应该为 resolve(newReason),不然会出现 .catch 无法将新 promise 的 state 变为 fulfilled,执行后续 .then 逻辑的情况。
图片描述

新问题:源码中40行 fn2 = typeof fn2 === 'function' ? fn2 : (e) => e。会出现这样的问题,new MyPromise((resolve, reject) => reject(100)).then(fnA).catch(fnB) 中 .catch 无法捕捉,因为被 .then 构造的 fn2 正常返回。所以 fn2 的默认函数应将错误继续抛出,才能让后面的 catch 捕捉到。
图片描述

写回答

1回答

双越

2022-03-07

感谢反馈~

这里补充的很好

0
0

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4728 学习 · 1684 问题

查看课程