Middle
/** * @param {Array} iterable * @return {Promise<Array>} */ function promiseAll(iterable) {} // Resolved example. const p0 = Promise.resolve(3); const p1 = 42; const p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('foo'); }, 100); }); promiseAll([p0, p1, p2]).then(console.log); // [3, 42, 'foo']
sobes.tech AI
Answer from AI
The promiseAll function should accept an iterable object with promises or values and return a promise that:
- resolves when all promises in the input array are resolved, with an array of results in the same order;
- rejects if at least one of the promises rejects.
Example implementation:
function promiseAll(iterable) {
return new Promise((resolve, reject) => {
const results = [];
let completed = 0;
const items = Array.from(iterable);
if (items.length === 0) {
resolve([]);
return;
}
items.forEach((item, index) => {
Promise.resolve(item)
.then(value => {
results[index] = value;
completed += 1;
if (completed === items.length) {
resolve(results);
}
})
.catch(reject);
});
});
}
// Usage:
const p0 = Promise.resolve(3);
const p1 = 42;
const p2 = new Promise(resolve => setTimeout(() => resolve('foo'), 100));
promiseAll([p0, p1, p2]).then(console.log); // [3, 42, 'foo']