← 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 [].

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