Input : It takes array of Promise (not necessary)
Output: It return Promise which contain array of result of all success promise.
Note: If any promise fails, it reject immediately.
`
Promise.myAll = function (promises) {
return new Promise(function (resolve, reject) {
// Check if input is an array
if (!Array.isArray(promises)) {
return reject(new TypeError("Argument must be an array"));
}
let results = []; let completedPromises = 0; promises.forEach(function (promise, index) { // Use Promise.resolve to handle non-promise values Promise.resolve(promise) .then(function (value) { results[index] = value; completedPromises += 1; // If all promises are resolved if (completedPromises === promises.length) { resolve(results); } }) .catch(function (error) { reject(error); // Reject if any promise fails }); }); // Handle case with empty array of promises if (promises.length === 0) { resolve([]); }
});
};
`
. All promises resolve, and their results are stored in the results array.
. When the number of resolved promises equals the length of the input array, the outer promise resolves with the results array.
. It is not neccessay that in array of promises all value must be a promise, it can by any value - number, string, or any synchronus function.
If the passed value is already a promise - It will return the same promise, ensuring that no extra wrapping or changing occur.
If the passed value is not a promise - It will wrap the value in resolved promise, allowing to treat it like a promise and handle it with .then()
so that it resolve with value, if we use reject it will caught in catch block with value considered as error.
If you still have any questions, feel free to ask in the comments!
The above is the detailed content of Polyfills of Promise.all(). For more information, please follow other related articles on the PHP Chinese website!