【发布时间】:2013-01-18 21:14:25
【问题描述】:
例如,假设我想从某个地方获取文件列表,然后加载这些文件的内容,最后将它们显示给用户。在同步模型中,它会是这样的(伪代码):
var file_list = fetchFiles(source);
if (!file_list) {
display('failed to fetch list');
} else {
for (file in file_list) { // iteration, not enumeration
var data = loadFile(file);
if (!data) {
display('failed to load: ' + file);
} else {
display(data);
}
}
}
这为用户提供了不错的反馈,如果我认为有必要,我可以将代码片段移动到函数中。生活很简单。
现在,粉碎我的梦想:fetchFiles() 和 loadFile() 实际上是异步的。简单的方法是将它们转换为同步函数。但是,如果浏览器锁定等待调用完成,这就不好了。
如何以经典的 reductio ad spaghettum 方式处理多个相互依赖和/或分层的异步调用,而无需深入研究无尽的回调链?是否有经过验证的范例可以干净地处理这些问题,同时保持代码松散耦合?
【问题讨论】:
-
这两个异步函数是否将回调作为其第二个参数?
-
是否要并行加载所有文件?并为每个单独显示数据/警报错误?
-
您能否对现有答案发表评论,说明为什么它们不可接受。反馈可以帮助我们帮助您。
-
@BenFelda 我将进一步调查现有的答案,但是当我开始赏金时,只有 jQuery 答案可用。
-
@Bergi 这实际上只是一个例子,我想要的是一种简洁的方式来构建具有大量异步调用的代码。
标签: javascript asynchronous loose-coupling waterfall