Назад к вопросам
Middle
4
/** * @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']
Компании, где спрашивали
IGaming
Ответ от нейросети
sobes.tech AI
Функция promiseAll должна принимать итерируемый объект с промисами или значениями и возвращать промис, который:
- разрешается, когда все промисы из входного массива разрешены, с массивом результатов в том же порядке;
- отклоняется, если хотя бы один из промисов отклоняется.
Пример реализации:
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);
});
});
}
// Использование:
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']