我该如何在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) –