浏览器针对Promise的一些兼容方法|给你代码
前言
promise是现代web比较常用的一个技术,拜托繁琐的嵌套回调。让我们看一些现代浏览器的支持度。
canisue 可以查看各个属性的兼容性。其实各个浏览器的支持度都还可以,我下面放出一些可能会出现不兼容情况的polyfill。
补充polyfill
1.promise相关 ,promise.all只能返回全部resolve的,如果有一个reject就会在catch里返回这个状态。所以现在有一个需求,能实现无论是否resolve或者reject都能把结果放进返回的数组里返回。现有 Promise.allSettled() (TC39第4阶段草案)。以下是一种polyfill。其实他和all的差距就是在catch的处理上,一个是直接reject。
/**
* Promise全部执行完
* @param {Array<Promise|Number>} args
* @return {Promise}
*/
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);
}
})
})
}2.Promise.finally 由于有一部分不支持这个方法所以有以下polyfill. finally实际不接受参数,他直接是写一次then,catch。避免你在写多余的东西。
Promise.prototype.finally = function(cb) {
return this.then(cb).catch(cb);
}给你代码|往期回顾:
相关文章
- Spring Boot中对接Twilio以实现发送验证码和验证短信码
- Spring Boot 3.5:这次更新让你连配置都不用写了,惊不惊喜?
- Spring Boot+Pinot实战:毫秒级实时竞价系统构建
- SpringBoot敏感配置项加密与解密实战
- SpringBoot 注解最全详解,建议收藏!
- Spring Boot 常用注解大全:从入门到进阶
- SpringBoot启动之谜:@SpringBootApplication如何让配置化繁为简
- Springboot集成Kafka原理_spring集成kafka的原理
- Spring Boot中@Data注解的深度解析与实战应用
- 大佬用1000字就把SpringBoot的配置文件讲的明明白白!
