【发布时间】:2014-06-25 21:59:07
【问题描述】:
当我的函数包含在其体内发出新线程/工作者的内容时,使用什么正确模式?为了更好地说明问题,请查看以下 jsFiddle:http://jsfiddle.net/Dx29q/
function write(text){
var obj = document.getElementById('foo');
obj.innerHTML = obj.innerHTML + text + ' ';
}
function test(a,b,callback){
write(a+b); //A
setTimeout(function(){write(a-b);},1000); //B
write(a*b); //C
callback(); //D
}
test(3,2,function(){
write("Finished!");
});
问题在于执行操作的实际顺序是 ACDB。我只想在回调完成之前函数中的所有内容之后执行回调。我必须使用纯 JavaScript(甚至不是库)。我正在努力寻找任何好的教程来解决使用回调时的高级情况,只有完整的基础知识。
感谢您的建议!
编辑如下:
我需要达到的顺序是 (ABC)D,我不关心 ABC 之间的顺序,只要 D 完全完成后才执行。
setTimeout 只是一个例子,为了更好地想象一个调用 foo()、bar()、baz() 和 callback() 的函数。 foo、bar、baz需要分别同时执行,后面还要调用callback()。
【问题讨论】:
-
您的目标执行顺序是什么? ACBD?
-
@RobbyCornelissen ABCD,或者更准确地说,我不关心 ABC 之间的顺序,只要 D 仅在它们之后执行。
-
那么超时如何处理?
-
@RobbyCornelissen 我也想知道 :) 必须有一种方法来确定触发回调函数是否安全。
-
如果不重建像promises 这样的东西,你唯一真正的选择是拥有一个你不断传递大量onComplete-callbacks 的结构。特别是如果执行的函数本身包含异步代码。
标签: javascript callback