Sobes.tech
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']
/** * @param {Array} iterable * @return… - sobes.tech