我是前端新手。在 Javascript 中,setTimeout() 和 setInterval() 函数是异步的吗?我阅读了一些使用这两个函数来模拟异步的教程,但我不知道它们是否真的如此。
3 回答
1
它们是异步的并在 JavaScript事件循环中运行。但是它们不是,它是围绕Promisesasync工作的函数的语法糖。
我们可以提供一个具体的例子来说明如何setTimeout轻松利用async和await. 单击运行片段以在您自己的浏览器中验证结果 -
const sleep = ms =>
new Promise(r => setTimeout(r, ms)) // <- Promise around setTimeout
async function main()
{ console.log("powering on. please wait ...")
await sleep(1000)
console.log("initializing system resources...")
await sleep(1500)
console.log("133 MHZ CPU deteced")
await sleep(1200)
console.log("64 KB RAM available")
await sleep(2000)
console.log("120 MB hard drive deteced")
await sleep(500)
console.log("registering PCI devices...")
await sleep(1000)
console.log("starting MS-DOS...")
return "ready"
}
main().then(console.log, console.error)
powering on. please wait ...
initializing system resources...
133 MHZ CPU deteced
64 KB RAM available
120 MB hard drive deteced
registering PCI devices...
starting MS-DOS...
ready
于 2021-04-02T05:04:56.380 回答
0
两者都将函数作为参数并安排该函数稍后执行。因此,可以说它们在某种意义上是“异步的”。然而,在 JavaScript 中,“async”这个词有一个非常具体的含义,因为async它是一个用于声明函数的关键字,在这个意义上它们不是异步的,因为它们不返回 Promise。
于 2021-04-02T04:57:48.263 回答
-1
快速回答 javascript 是同步的,但有些回调是异步的。
setTimeout() 函数将在堆栈中触发,然后继续执行后面的操作,即使它还没有完成它的计时器。
Javascript 自然是同步的,但是一些回调是异步的,比如 setTimeout 和 setInterval,现在如果你想等待什么,可以考虑使用 Promise 代替new Promise(() => console.log()。- 我提供了错误的信息,现在修复
如果您像这样编写一个简单的代码块,您会注意到即使它以相反的顺序放置,non timeout也会打印 then interval。timeout
setTimeout(() => console.log('timeout'), 3000)
setInterval(() => console.log('interval'), 2000)
console.log('non timeout')
于 2021-04-02T05:04:06.050 回答