← 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 [].
Ctrl+Enter uruchamia testy. Tab robi wcięcie; aby wyjść z edytora klawiaturą, naciśnij Esc, a potem Tab. Kod zapisuje się w tej przeglądarce.
Testy (6)
expect(await promiseAll([Promise.resolve(1), 2, Promise.resolve(3)])).toEqual([1, 2, 3]);
const slow = wait(40).then(() => 'slow'); const fast = wait(10).then(() => 'fast'); expect(await promiseAll([slow, fast])).toEqual(['slow', 'fast']);
expect(await promiseAll([])).toEqual([]);
const error = new Error('boom'); await expect(promiseAll([wait(20), Promise.reject(error)])).rejects.toBe(error);
const started = Date.now(); await promiseAll([wait(50), wait(50), wait(50)]); expect(Date.now() - started < 120).toBe(true);
expect(promiseAll([1])).toBeInstanceOf(Promise);