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