Iterieren Sie über eine unbestimmte Anzahl von zurückgestellten Elementen

Angenommen, ich habe eine sehr lange Liste, in der für jedes Element ein asynchroner Aufruf zum Abrufen erforderlich ist. Ich möchte eine API über diese Liste schreiben, damit ein Verbraucher einfach "next ()" aufrufen oder auf andere Weise synchron über die Liste iterieren kann.

Idealerweise hätte ich etwas, das so aussieht:

while ((foo = generator.next()) != null) {
  process(foo);
}

Aber ich stolpere über die Semantik von verzögerten Aufrufen und weiß nicht, wie ich dieses hartcodierte Muster in eine generische Schleife umwandeln kann:

$.when(foo).then(process1AndFetch2)
  .then(process2AndFetch3)
  .then(process3AndFetch4)
  ...

Vermutlich könnte ich das mit Rückrufen selber machen

var callback = function() {
  process();
  fetch(callback);
}
fetch(callback);

Aber dann würde mein Stapel sehr tief werden, weshalb ich aufgeschoben arbeitete.

Gibt es irgendwelche üblichen Verdächtigen, diese Art von asynchronem Verhalten in eine synchrone API umzuwandeln?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage