[英]Iterate over indefinite array of deferred items
假设我有一个很长的列表,其中每个元素都需要异步调用来提取。 我想在该列表的顶部编写一个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+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.