javascript - 迭代不确定的延迟项目数组

标签 javascript jquery asynchronous jquery-deferred

假设我有一个很长的列表,其中每个元素都需要异步调用才能获取。我想在该列表之上编写一个 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 是否有任何常见的嫌疑?

最佳答案

你不能使用这样的语法,因为它只会进入无限繁忙循环。

有一个常见的 promise 习惯用法可以做到这一点:

var array = [process1AndFetch2, ...]

array.reduce(function(a, b) {
    return a.then(process).then(b);
}, array.shift()()).then(function(){
    //All processed
});

假设 jQuery 1.8+

关于javascript - 迭代不确定的延迟项目数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567504/

相关文章:

javascript - Node.JS:如何将变量传递给异步回调?

javascript - HTML 表格的内联编辑

javascript - 如何在 TypeScript 中将数组转换为对象?

javascript - 错误 : [filter:notarray] Expected array in ng-options

javascript - 没有分页的 YUI 数据表和大数据集

javascript - 当我在 jquery fullcalendar 中将 slotMinutes 设置为 50 值时出现错误

javascript - 将 javascript 数组传递给 Django View

node.js - 在 Node.js 中异步查询多个 MongoDB 集合

javascript - 在 jQuery 中使用 $() 快捷方式是不好的做法吗?

c# - 响应门控下一条消息发送,使用 Rx