← Wszystkie zadaniaJavaScript · Middle

promiseAll: własne Promise.all

Napisz funkcję promiseAll(items), która działa jak Promise.all, ale go nie używa. Zwraca obietnicę z tablicą wyników w kolejności elementów items, a nie w kolejności zakończenia.

Elementy mogą być obietnicami lub zwykłymi wartościami. Pierwszy błąd od razu odrzuca całą obietnicę. Pusta tablica daje [].

Testy (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);