前言
promise是现代web比较常用的一个技术,拜托繁琐的嵌套回调。让我们看一些现代浏览器的支持度。
canisue 可以查看各个属性的兼容性。其实各个浏览器的支持度都还可以,我下面放出一些可能会出现不兼容情况的polyfill。
补充polyfill
1.promise相关 ,promise.all只能返回全部resolve的,如果有一个reject就会在catch里返回这个状态。所以现在有一个需求,能实现无论是否resolve或者reject都能把结果放进返回的数组里返回。现有 Promise.allSettled() (TC39第4阶段草案)。以下是一种polyfill。其实他和all的差距就是在catch的处理上,一个是直接reject。
<code>Promise
.allFinally =function
(args
) {return
new
Promise
(resolve
=> {const
response = [];let
len = args.length;function
setRes
(index, value, response, status
) { response[index] = { status, value }; len--;if
(len ===0
) { resolve(response); } } args.forEach((
item, index
) => {if
(item.constructor ===Promise
) { item.then(res
=> { setRes(index, res, response,"fufilled"
); }, err => { setRes(index, err, response,"rejected"
); }) }else
{ setRes(index, item, response); } }) }) }/<code>
2.Promise.finally 由于有一部分不支持这个方法所以有以下polyfill. finally实际不接受参数,他直接是写一次then,catch。避免你在写多余的东西。
<code>Promise
.prototype.finally =function
(cb
) {return
this
.then(cb).catch(cb); }/<code>
给你代码|往期回顾:
专栏
给你代码
29币
0人已购