Sobes.tech
Back to questions
Middle
5

/** * @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']

Companies where asked
IGaming

Answer from AI

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']