Итерация по неопределенному массиву отложенных элементов

Скажем, у меня очень длинный список, в котором каждому элементу требуется асинхронный вызов для извлечения. Я хотел бы написать API поверх этого списка, чтобы потребитель мог просто вызывать «next ()» или иным образом синхронно перебирать список.

В идеале у меня было бы что-то похожее на это:

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

Но я обнаружил, что спотыкаюсь о семантике отложенных вызовов, и я не знаю, как превратить этот жестко запрограммированный шаблон в общий цикл:

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

Предположительно, я мог бы сделать это сам с помощью обратных вызовов

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

Но тогда мой стек стал бы очень глубоким, поэтому я работал с отсрочками.

Существуют ли какие-либо обычные подозрения для превращения такого рода асинхронного поведения в синхронный API?

Ответы на вопрос(1)

Ваш ответ на вопрос