Rolf B: ADVANCED - promise.all in Verbindung mit decorator functions

Beitrag lesen

Hallo Carmen,

zusätzlich zu dem, was dedlfix sozusagen in dem Moment schrieb, wo ich deinen Code endlich durchschaut hatte, noch ein paar Anmerkungen.

  • Promise.all führt keine Live-Überwachung eines Promise-Arrays durch. Es nimmt die Promises, die im Moment des all()-Aufrufs im Array stehen, und überwacht genau diese und kein weiteres.

  • D.h. wenn Du ein System bauen willst, dass in dem Moment zuschlägt, wo das letzte Promise in einem Pool erfüllt wird, solltest Du jedenmal, wenn ein Teil-Promise erfüllt wird, dieses aus dem Pool entfernen. Und wenn der Pool leer ist, wird das Gesamtpromise erfüllt. Ggf. sollte der Promisemanager auch noch so was wie einen Sicherungsschalter bekommen, den Du erst freigibst, wenn das letzte Promise drin ist. Damit kannst Du verhindern, dass für den Fall, dass der Pool je nach Timing zwischendurch mal leer läuft, ein "Fertig" gemeldet wird.

Das ist aber etwas, das Du selbst steuern musst, Promise.all() leistet das nicht.

D.h. mein Vorschlag wäre entweder eine class PromisePool, die das Thema mit Eigenschaften und Methoden eines PromisePool-Objekts löst, oder eine Funktion getPromisePool, die vergleichbares mit einer Closure löst (also das, was Du im Moment hast). Ob man das "alles fertig" sinnvollerweise mit einem weiteren Promise löst (so wie Promise.all) oder einfach einen Callback festlegt, darüber kann man geteilter Meinung sein.

Rolf

--
sumpsi - posui - obstruxi