Skip to content

Instantly share code, notes, and snippets.

@alanwei43
Created September 18, 2019 12:02
Show Gist options
  • Save alanwei43/a1a93da14ca034eb35486358db0480b8 to your computer and use it in GitHub Desktop.
Save alanwei43/a1a93da14ca034eb35486358db0480b8 to your computer and use it in GitHub Desktop.
Promise.whenAllSettled
/**
* 所有Promise都被 settled
* @param {[{promise: function():Promise, data: {}}]} promises
* @retu {Promise<[{isResolve: boolean, isReject: boolean, error: {}, result: {}, data: {}}]>}
*/
Promise.whenAllSettled = function (promises) {
const isPromise = function (obj) {
return obj && typeof obj.then === "function" && typeof obj.catch === "function";
};
const mapedPromises = promises
.map(item => {
if (isPromise(item)) {
return { promise: item, data: undefined };
}
if (item && isPromise(item.promise)) {
return item;
}
return {
promise: Promise.reject(new Error("invalid_promise")),
data: item
};
})
.map(item => item.promise.then(result => {
return {
isResolve: true,
isReject: false,
result: result,
data: item.data
}
}, error => {
return {
isResolve: false,
isReject: true,
error: error,
data: item.data
};
}));
return Promise.all(mapedPromises);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment