1、Promise.all([promise, promise2, ...])
let p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 100, "one");
});
let p2 = new Promise(function (resolve, reject) {
setTimeout(reject, 200, "two");
});
let p3 = new Promise(function (resolve, reject) {
setTimeout(resolve, 300, "three");
});
Promise.all([p1, p2, p3]).then(
(value) => {
console.log("onResolve: ", value);
},
(reason) => {
console.log("onRejected: ", reason);
}
);
2、Promise.allSettled([promise, promise2, ...])
let p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 100, "one");
});
let p2 = new Promise(function (resolve, reject) {
setTimeout(reject, 200, "two");
});
let p3 = new Promise(function (resolve, reject) {
setTimeout(resolve, 300, "three");
});
Promise.allSettled([p1, p2, p3]).then((value) => {
console.log("onResolve: ", value);
});
onResolve: [
{ status: 'fulfilled', value: 'one' },
{ status: 'rejected', reason: 'two' },
{ status: 'fulfilled', value: 'three' }
]
Promise.myAll = function (taskList) {
if (!Array.isArray(taskList)) throw new Error("参数必须为数组");
return new Promise((resolve, reject) => {
let result = [];
taskList.forEach((task, index) => {
Promise.resolve(task).then(
(data) => {
result[index] = data;
if (result.length === taskList.length) resolve(result);
},
(reason) => {
reject(reason);
}
);
});
});
};
Promise.myAllSettled = function (taskList) {
if (!Array.isArray(taskList)) throw new Error("参数必须为数组");
return new Promise((resolve, reject) => {
let result = [];
taskList.forEach((task, index) => {
Promise.resolve(task).then(
(value) => {
result[index] = { state: "fulfilled", value };
if (result.length === taskList.length) resolve(result);
},
(reason) => {
result[index] = { state: "rejected", reason };
if (result.length === taskList.length) resolve(result);
}
);
});
});
};