native-class-ext
Version:
js原生对象增加常用方法
61 lines (58 loc) • 1.52 kB
JavaScript
(function(){
const defineProperty = require('./defineProperty.js')
if (typeof Promise.allSettled === "undefined") {
/**
* 所有给定的Promise都实现或拒绝之后解析
* @param {Array} promises Promise数组
* @return {Array} 执行结果,顺序和promises一样, [{status: "rejected", reason: res}, {status: "fulfilled",value: res}]
* */
let allSettled = async function(promises) {
let ret = [];
for (var i = 0; i < promises.length; i++) {
try {
let res = await promises[i];
ret[i] = {
status: "fulfilled",
value: res
}
} catch (e) {
ret[i] = {
status: "rejected",
reason: e
}
}
}
return ret;
}
defineProperty(Promise, 'allSettled', allSettled);
}
if (typeof Promise.prototype.finally === 'undefined') {
// 兼容低版本浏览器
defineProperty(Promise.prototype, 'finally', function(onFinally) {
return this.then(
res => Promise.resolve(onFinally()).then(() => res),
err => Promise.resolve(onFinally()).then(() => {
throw err;
})
);
});
}
/**
* 不抛异常的方式返回结果
* */
let result = async function() {
try {
let res = await this;
return {
status: true,
data: typeof res == 'boolean' ? res : (res || {})
};
} catch (e) {
return {
status: false,
data: typeof e == 'boolean' ? e : (e || {})
};
}
}
defineProperty(Promise.prototype, '$result', result);
})()