浏览器针对Promise的一些兼容方法|给你代码

前言

promise是现代web比较常用的一个技术,拜托繁琐的嵌套回调。让我们看一些现代浏览器的支持度。

canisue 可以查看各个属性的兼容性。其实各个浏览器的支持度都还可以,我下面放出一些可能会出现不兼容情况的polyfill。

浏览器针对Promise的一些兼容方法|给你代码

补充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>


给你代码|往期回顾:

给你代码:阿里云短信验证码登录开发集成

给你代码:网站图标favicon自动抓取

给你代码:网站微信登录接入


专栏

给你代码

作者:鲲圭云计算

29币

0人已购

查看


分享到:


相關文章: