與頁面執行的一些領域是:
我沒一會兒測試這一點,但我假設它仍然是這樣的,如果你執行一個函數(或者在一個範圍內運行代碼),那麼如果你打電話來更新DOM或者發出一個網絡請求,直到當前範圍存在纔會發生。
例如
function doSomething() {
document.body.innerHTML += 'hello';
var ws = new WebSocket('ws://my-websocket-endpoint.com');
ws.onopen = function() { alert('awesome!'); };
}
doSomething();
在下文中上面的代碼會發生:
doSomething
執行和內部代碼運行。
doSomething
回報和範圍的變化
- 「你好」,然後出現在DOM的瀏覽器提供的UI線程有機會運行任何掛起更新
- 的WebSocket連接是由
- 這可能需要一段時間直到
alert
發生火災。
具體查看WebSocket
示例。如果您考慮在創建WebSocket
實例後添加事件處理程序的事實,這意味着只要我們調用構造函數就不會發生連接。只有在當前執行範圍完成時才嘗試連接。我不能100%確認這一點,但在實現範圍完成之前,WebSocket.send
函數實際上發送任何數據的可能性很小,例如,
var ws = new WebSocket('ws://my-websocket-endpoint.com');
function sendStuff() {
for(var i = 0; i < 10000; ++i) {
ws.send(i);
}
}
// Assume we are connected
sendStuff();
在上面的代碼我希望:
sendStuff
被調用,運行循環和退出
- 瀏覽器,然後用其他任何的待處理,其中包括網絡活動處理。這包括實際發送數據
可能的。嘗試通過window.timeout引入延遲。 – oberstet