迭代不确定的延迟项目数组
假设我有一个很长的列表,其中每个元素都需要异步调用fetch。 我想在该列表的顶部编写一个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是否有任何常见的嫌疑?
你不能拥有这样的语法,因为它只会进入无限繁忙的循环。
这样做有一个共同的承诺成语:
var array = [process1AndFetch2, ...] array.reduce(function(a, b) { return a.then(process).then(b); }, array.shift()()).then(function(){ //All processed });
假设jQuery 1.8+