如何解决为什么setTimeout函数是非阻塞的?
如果setTimeout是同步的,为什么它不阻塞?如果不是主线程,它将在哪个线程上执行?
解决方法
为什么setTimeout函数不返回承诺?
主要因为它早已将Promises添加到JS语言中。
setTimeout是同步还是异步?
它同步运行,并在一个函数中排队以运行以后。
为什么setTimeout不返回承诺而是返回数字?
它返回一个用于clearTimeout
的数字。
我们可以在setTimeout上使用await吗?
您只能有用地await
一个诺言。
您可以从传递给resolve
的回调函数中wrap a call to setTimeout
in a promise和setTimeout
。
await new Promise( resolve => setTimeout(() => {
// do whatever you like after 1s
// then:
resolve();
},1000);
,
超时功能是异步的,这就是为什么它是非阻塞的。它在主线程上执行。
超时功能执行如下:
,JavaScript中的计时器回调(setTimeout,setInterval)为 保留在堆内存中,直到它们过期。如果有的话 堆中的计时器过期,事件循环将执行回调 与它们关联并开始按升序执行它们 直到定时器队列为空之前的延迟时间。
setTimeout 本质上是同步的。它的回调在定时器阶段被事件循环注册,它将以异步方式执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。