浏览器针对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);
}
给你代码|往期回顾:
相关文章
- Linux服务器硬件信息查询与日常运维命令总结
- Linux服务器带宽跑不满?用ethtool调优网卡参数,性能提升30%
- 如何在 Rocky Linux 中查看网卡流量?跟着小编学习iftop安装和使用
- Linux查看网卡速率_linux查看网卡当前速率
- 五一我要看七天小说!免费开源的轻量化书库talebook搭建流程。
- 我是如何用这3个小工具,助力小姐姐提升100%开发效率的
- html5和css3的常用参考网_基于html5和css3的网页制作
- 超详细的网络抓包神器 tcpdump 使用指南
- Vue 技术栈(全家桶)_vue全栈项目教程
- 学习ES6- 入门Vue(大量源代码及笔记,带你起飞)