allsettled解决的问题:
all只有所有promise任务成功才resolve,存在一个失败即reject;
allsettled 在此基础上优化,返回所有任务的状态和结果,使得成功的promise不受影响,即使有reject的任务,成功的任务仍然可使用。
step1 定义方法
入参 promise任务数组,返回Promise
Promise.propotype.allsettled = function(promises = []) {
return new Promise((resolve, reject) => {
});
}
step2 完善细节
Promise.propotype.allsettled = function(promises = []) {
const result = [];
return new Promise((resolve, reject) => {
promises.forEach(p => {
p.then((value) => {
result.push({
status: 'fulfilled',
value,
});
})
.catch(reason => {
result.push({
status: 'rejected',
reason,
});
})
})
resolve(result);
});
}