4
我的代码有可能会在短期内推迟两个或更多的功能。我可以保证每个延期的函数将按照我创建它们的顺序执行吗?对于iOS 5 & 6上的我的Web应用程序,我的代码的正确性依赖于顺序执行的延迟函数。在Javascript中,按顺序执行延迟函数吗?
我正在使用Prototype's defer,它使用0.01秒的超时执行。
“延迟”函数不会立即运行;相反,当解释器的调用堆栈为空时,它将尽快作为 运行。
从我自己的测试看来,它们似乎是按照我创建它们的顺序执行的。以下按顺序打印出0到99之间的所有整数。
测试代码
for (var i = 0; i < 100; i++) {
(function(x) {
return function() {
console.info(x);
}
})(i).defer();
}
输出
0
1
2
...
88
99
然而,这样的结果是没有定论。我不知道它如何处理更深层的功能或不同的CPU负载。
为什么不编程就好像没有保证?在'defer()'方法中,它调用使用本地'setTimeout()'的'delay()'方法的 – akonsu
。为什么不使用自定义事件侦听器?即'document.observe('trigger:myfirstevent',function(){});'then'document.fire('trigger:myfirstevent');'只要您推迟第一个呼叫,剩下的呼叫将会触发订购。 (自定义事件需要使用“:”命名空间) –
@akonsu我发现iOS的JS事件处理运行在与主线程不同的线程中。在多线程环境中,任何函数都可以在中途切断并执行一些其他代码。交错代码会导致习惯了JS传统单线程引擎的状态机问题。为了缓解这些问题,我想推迟一些事件处理回调来模拟单线程代码排序。 – Pwner