记录一下需要记忆的点
finally的实现方式
虽然看起来很简单,但是也值得思索
1 | Promise.prototype.myFinally = function (callback) { |
从上边的代码,我们可以得知
错误捕获到后,就不会继续冒泡了,也就是不会被后面的catch捕获,所以上边代码加了一个throw reson
从上面的实现还可以看到,
finally
方法总是会返回原来的值,注意下述代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15const p2 = new Promise(function (resolve, reject) {
setTimeout(() => resolve("11111"), 1000)
})
Promise.prototype.myFinally = function (callback) {
let P = this.constructor;
return this.then(
value => P.resolve(callback()).then(() => value),
reason => P.resolve(callback()).then(() => { throw reason })
);
};
p2.myFinally(() => {
}).then(res => {
console.log(res); // 1111
})也就意味着在promise中穿插finally 并不会有副作用
// TODO
P.resolve(callback()).then(() => value)
为什么需要这么长呢
面试手写promise
面试够用版
没实现异步吧 我觉得
1 | function myPromise(constructor){ |
大厂专供版
直接贴出来吧,这个版本还算好理解
1 | const PENDING = "pending"; |