繁体   English   中英

遍历不确定项的递延项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM