← Усі задачіJavaScript · Middle
promiseAll: свій Promise.all
Напишіть функцію promiseAll(items), яка працює як Promise.all, не використовуючи його. Вона повертає проміс із масивом результатів у порядку елементів items, а не в порядку завершення.
Елементи можуть бути промісами або звичайними значеннями. Перша помилка одразу відхиляє загальний проміс. Порожній масив дає [].
Ctrl+Enter - запустити тести. Tab - відступ; щоб вийти з редактора клавіатурою, натисніть Esc, а потім Tab. Код зберігається в цьому браузері.
Тести (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);