Code: Select all
predicates$.pipe(
concatMap(callExpensiveAPI),
filter(isTruthy),
take(4)
).subscribe();
Code: Select all
predicates$.pipe(
mergeMap(callExpensiveAPI, 4), // Limit to four concurrent API calls
filter(isTruthy),
take(4)
).subscribe();
< /code>
Es gibt jedoch noch zwei Mängel: < /p>
Die Reihenfolge der Prädikate (und Ergebnisse) ist nicht erhalten. Ich werde nur vier Wahrheitsprädikate bekommen, aber ihre Reihenfolge im Stream hängt von der Reaktionszeit der API -Anrufe ab. Es besteht die Möglichkeit, dass nach dem Initiieren des vierten API -Anrufs für nachfolgende Prädikate im Stream ein paar weitere Anrufe (bis zu drei!) Tätig werden. Im schlimmsten Fall wird ein nachfolgender Aufruf wahre < /Code> vor dem tatsächlichen "vierten wahrheitsgemäßen" Prädikat < /strong> zurückgegeben, und das Endergebnis wird nicht die ersten vier Wahrheitspräentikate sein. in der nachgelagerten Pipeline. Wenn nur ein weiteres Prädikat benötigt wird, wäre der Parameter Parallelität 1
Wie könnte ich eine solche Pipeline implementieren?>