我該如何在JavaScript中做一個自旋鎖?Spinlock in Javascript
我試圖加載一些圖片,一切都被加載後,我只可以向前走,所以我有這樣
for(...)
image[i].onload = function() { ++imagesloaded; }
while(imagesloaded != totalimages)
{
}
一個自旋鎖,並且它崩潰了我的瀏覽器。有沒有更好的方法來做到這一點?或者我失蹤的產量/睡眠功能?
我該如何在JavaScript中做一個自旋鎖?Spinlock in Javascript
我試圖加載一些圖片,一切都被加載後,我只可以向前走,所以我有這樣
for(...)
image[i].onload = function() { ++imagesloaded; }
while(imagesloaded != totalimages)
{
}
一個自旋鎖,並且它崩潰了我的瀏覽器。有沒有更好的方法來做到這一點?或者我失蹤的產量/睡眠功能?
不要使用循環來檢查。檢查事件處理函數。 (所以你只做圖像加載時檢查,而不是連續和儘可能快)
簡短的回答:不要自旋鎖。
較長的答案:這裏是如何做到這一點:
var imagesLoaded = 0;
var totalImages = 42;
function handleImageLoad()
{
imagesLoaded++;
if (imagesLoaded === totalImages)
{
doSomething();
}
}
for (var i=0; i<totalImages; i++)
{
image[i].onload = handleImageLoad;
}
在一般情況下,當你想睡覺/等待/旋在JavaScript中,而不是考慮在以下方面解決問題回調(和setTimeout
/setInterval
)。
請記住,您必須在'.src'之前設置'onload()'處理程序在圖像上設置。否則,如果圖像從緩存中加載(因此加載非常快),您可能會錯過某些瀏覽器中的'onload()'事件。 – jfriend00
[哦,你的意思是這樣嗎? ':P'](http://stackoverflow.com/questions/8030971/spinlock-in-javascript/8030988#8030988) –