假设我想每秒运行update()
函数。
我可以通过两种方式做到这一点:
async function interval() {
await new Promise((res, req) => {
setTimeout(res, 1000)
})
update()
interval()
}
要么
setInterval(update, 1000)
这两者之间有什么功能差异吗?
你的问题是要求settimeout和setinterval之间的区别来实现重复,我觉得这里没有asycn / await的相关性,你刚刚使用它来避免在setTimeout中调用相同的函数。 或者你可能会说相关性是async / await正在做什么,setTimeout做了什么,但是正如Ayush指出的那样,你没有任何选项来取消循环,你可以通过setTimeout获得 因此,以下链接可能会回答您的好奇心。 setTimeout or setInterval? 谢谢
不同之处在于你的interval
函数会在完成时返回一个承诺。你需要添加一个return
,以便它正常工作:
async function interval() {
await new Promise((res, req) => {
setTimeout(res, 1000)
})
update()
return interval()
//^^^^^^
}
现在,当update
抛出异常时,承诺被拒绝,你可以.catch()
错误。此外,interval
递归调用将停止运行,而setInterval
将继续运行。
此外,async
/ await
语法的优点是可以避免递归来创建循环:
async function interval() {
while (true) {
await new Promise((res, req) => {
setTimeout(res, 1000)
})
update()
}
}