← Усі задачіJavaScript · Middle

promiseAll: свій Promise.all

Напишіть функцію promiseAll(items), яка працює як Promise.all, не використовуючи його. Вона повертає проміс із масивом результатів у порядку елементів items, а не в порядку завершення.

Елементи можуть бути промісами або звичайними значеннями. Перша помилка одразу відхиляє загальний проміс. Порожній масив дає [].

Тести (6)

  1. expect(await promiseAll([Promise.resolve(1), 2, Promise.resolve(3)])).toEqual([1, 2, 3]);
  2. const slow = wait(40).then(() => 'slow');
    const fast = wait(10).then(() => 'fast');
    expect(await promiseAll([slow, fast])).toEqual(['slow', 'fast']);
  3. expect(await promiseAll([])).toEqual([]);
  4. const error = new Error('boom');
    await expect(promiseAll([wait(20), Promise.reject(error)])).rejects.toBe(error);
  5. const started = Date.now();
    await promiseAll([wait(50), wait(50), wait(50)]);
    expect(Date.now() - started < 120).toBe(true);
  6. expect(promiseAll([1])).toBeInstanceOf(Promise);