War*_*mix 3 javascript while-loop local-storage
我有这个代码:
localStorage.setItem('try', '1');
setTimeout(function(){localStorage.setItem('try', '2');}, 2000);
while(localStorage.getItem('try') == '1')
{
console.log('a');
}
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用?这个while循环应该工作,直到localStorage.getItem('try')=='1'.2秒后localStorage.setItem('尝试','2')所以这应该停止但不做:(为什么?我应该用它来使它工作?
因为页面上的主要JavaScript是由浏览器在一个线程中运行的(连同浏览器UI,大多数都是这样),所以您的定时回调位于作业队列中,等待当前正在运行的作业(具有你的while循环)完成.由于您的while循环作业永远不会完成,因此下一个作业永远不会运行
永远不要忙于等待基于浏览器的JavaScript(在任何环境中都不是一个好主意).相反,setTimeout在允许其他作业运行后,安排回调以检查结果,例如:
localStorage.setItem('try', '1');
setTimeout(function() {
localStorage.setItem('try', '2');
}, 2000);
function check() {
if (localStorage.getItem('try') != '1') {
console.log('a');
} else {
setTimeout(check, 0);
}
}
setTimeout(check, 0);
Run Code Online (Sandbox Code Playgroud)
当然,这是一个非常激进的检查.您可能使用更高的间隔,可能是100(10次/秒)或250(4次/秒).
旁注:我已经将其0用作回调时间,它基本上将计时器回调立即添加到作业队列中(但是在其他作业之后).浏览器将第一次尊重,但是当计时器回调计划定时器,计划定时器等等时,最终浏览器会增加4ms的最小延迟(例如,表现得像你传递4而不是0).有关详细信息,请参阅HTML规范的计时器部分(大约不仅仅是HTML).
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |