← Alle AufgabenJavaScript · Middle
promiseAll: ein eigenes Promise.all
Schreib eine Funktion promiseAll(items), die wie Promise.all funktioniert, ohne es zu nutzen. Sie liefert ein Promise mit einem Array von Ergebnissen in der Reihenfolge von items, nicht in der Reihenfolge ihres Abschlusses.
Die Einträge können Promises oder einfache Werte sein. Der erste Fehler lehnt das ganze Promise sofort ab. Ein leeres Array ergibt [].
Strg+Enter führt die Tests aus. Tab rückt ein; um den Editor per Tastatur zu verlassen, drücke Esc und dann Tab. Der Code wird in diesem Browser gespeichert.
Tests (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);