Tach!
- 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.
Damit hat man das Problem des "Buffer Underrun", dass es schon fertig wird, wenn alle bisher bekannten Promises fertig sind, das ich am Anfang meiner Antwort erwähnte.
Ggf. sollte der Promisemanager auch noch so was wie einen Sicherungsschalter bekommen, den Du erst freigibst, wenn das letzte Promise drin ist.
Dafür braucht es keinen komplizierten Manager. Dann kann man die Promises auch in einem Array sammeln, dass man erst dann dem Promise.all() übergibt. Wenn man unbedingt will, sähe der Verwalter so aus:
function observer() {
const pool = [];
return {
next(promise) {
promise instanceof Promise && pool.push(promise);
},
complete(promise) {
this.next(promise);
return Promise.all(pool);
}
}
}
const o = observer();
o.next();
o.next();
o.next();
o.complete().then();
Den next()s und auch dem complete() kann man die Promises übergeben.
P.s. Man nehme const
statt let
, wenn sich die Werte nicht ändern.
dedlfix.