Итерация по неопределенному массиву отложенных элементов
Скажем, у меня очень длинный список, в котором каждому элементу требуется асинхронный вызов для извлечения. Я хотел бы написать 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?