Custom Promise.all — handle mixed results and errors.
1async function promiseAllSettled(promises) {2 return Promise.all(3 promises.map(promise =>4 promise5 .then(value => ({ status: "fulfilled", value }))6 .catch(reason => ({ status: "rejected", reason }))7 )8 );9}1011// Usage12const results = await promiseAllSettled([13 fetch("https://api1.com/data"),14 fetch("https://api2.com/data"),15 fetch("https://api3.com/data"),16]);1718results.forEach(result => {19 if (result.status === "fulfilled") {20 console.log("Success:", result.value);21 } else {22 console.error("Failed:", result.reason);23 }24});2526// With concurrency limit27async function promiseAllWithLimit(promises, limit) {28 const results = [];29 const executing = new Set();3031 for (const [i, promise] of promises.entries()) {32 const p = promise.then(result => {33 results[i] = { status: "fulfilled", value: result };34 executing.delete(p);35 }).catch(err => {36 results[i] = { status: "rejected", reason: err };37 executing.delete(p);38 });3940 executing.add(p);4142 if (executing.size >= limit) {43 await Promise.race(executing);44 }45 }4647 await Promise.all(executing);48 return results;49}