JavaScript封装异步操作setTimeout成Sleep
1 前言
-
JavaScript是单线程语法,没有语言内置的休眠(sleep or wait)函数,所谓的sleep只是实现一种延迟执行的效果。
-
遵循事件循环机制,当JS解析执行时,会被引擎分为两类任务,同步任务(synchronous) 和 异步任务(asynchronous)。
-
对于同步任务来说,会被推到执行栈按顺序去执行这些任务。
-
对于异步任务来说,当其可以被执行时,会被放到一个 任务队列(task queue) 里等待JS引擎去执行。
-
-
当执行栈中的所有同步任务完成后,JS引擎才会去任务队列里查看是否有任务存在,并将任务放到执行栈中去执行,执行完了又会去任务队列里查看是否有已经可以执行的任务。这种循环检查的机制,就叫做事件循环(Event Loop)。
2 采用Promise和async/await进行setTimeout的封装
这里首先采用了Promise对setTimeout进行封装
function sleepFun(time) {
return new Promise((resolve) => {
setTimeout(() =>