作者:arthur | 来源:互联网 | 2020-09-11 09:21
Javascript 阻塞程序运行Javascript的线程问题
Javascript 是单线程的,一段 Js 程序的运行会占满整个程序进程,我们通常会想方设法的通过异步编程来减少程序的阻塞,但在某些特殊的场景下我们需要阻塞程序的运行,那么今天就反其道而行之,看看通过怎么样正常的方式来阻塞 Js 运行。
方法一 :无限循环
function sleep(d){
let t = Date.now();
while(Date.now() - t <= d);
}
function test() {
console.log(&#39;sleep&#39;);
sleep(10000);
console.log(&#39;run&#39;);
}
test();
方法二 : setTimeout
function test() {
console.log(&#39;sleep&#39;);
setTimeout(function() {
console.log(&#39;run&#39;);
}, 10000)
}
await
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function test() {
console.log(&#39;sleep&#39;);
await sleep(10000);
console.log(&#39;run&#39;);
}
test();
方法三 : generator & yield
function sleep(time) {
setTimeout(function () {
test.next();
}, time);
}
function* gen() {
console.log(&#39;sleep&#39;);
yield sleep(10000);
console.log(&#39;10 second later&#39;);
}
let test = gen();
test.next();
总结
上述方法总结下来就是两种,一种是强行阻断式利用 Js 的单线程机制;另一种就是借助 Js 的异步事件机制+高级异步编程语法。当然我们在实际业务情况中使用阻塞 JS 进程的地方非常少,经常会通过 UI 来禁止用户继续操作,这样的探索仅仅是搞清楚一些 Js 的基本原理,有助于我们很好的了解它。
推荐教程:《JS教程》
以上就是Javascript阻塞问题的详细内容,更多请关注 第一PHP社区 其它相关文章!