【发布时间】:2013-12-17 00:01:17
【问题描述】:
假设我有一个很长的列表,其中每个元素都需要异步调用来获取。我想在该列表之上编写一个 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 的常见嫌疑人?
【问题讨论】:
-
看看here。这个问题的措辞不同,但我的回答应该会给你一些关于如何动态构建
.then()链的有力线索。
标签: javascript jquery asynchronous jquery-deferred