假设我想每秒运行一次函数update()
。
我可以通过两种方式做到这一点:
async function interval() {
await new Promise((res, req) => {
setTimeout(res, 1000)
})
update()
interval()
}
或
setInterval(update, 1000)
两者之间是否有任何功能差异?
答案 0 :(得分:0)
不同之处在于您的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()
}
}
答案 1 :(得分:0)
你的问题是要求settimeout和setinterval之间的区别来实现重复,我觉得这里没有asycn / await的相关性,你刚刚使用它来避免在setTimeout中调用相同的函数。
或者你可能会说相关性是async / await正在做什么,setTimeout做了什么,但是正如Ayush指出的那样,你没有任何选项可以取消循环,你可以通过setTimeout获得这个循环
因此,以下链接可能会回答您的好奇心
setTimeout or setInterval?
感谢