是否可以使用 setInterval 等待承诺响应?
is it possible to await for a promise response using setInterval?
基本上我有一个计时器,假设计时器从 60 秒开始,当它达到 0 时变为 0,它会发出 api 调用并重新启动计时器,我遇到的问题是当计时器达到 0 它只是重新启动而不等待承诺响应,在某种程度上我需要计时器在 0 处暂停等待响应然后再次从 60 开始计数,我尝试使用 clearInterval()
但它仅在第一个工作计时器停止后倒计时,这是我的以下代码,我认为它会更容易理解
setInterval(async () => {
document.querySelector('.timeh1').innerHTML = newInterval - i
i++
if(i >= newInterval){
await apiCallReload(currency)
i = 0
}
}, 1000)
如您所见,此函数每秒执行一次,当 运行 时间 (i) 达到计时器限制 (newInterval) 时,它将调用我的 apiCallReload()
函数,计时器将重置为0,但问题是计时器重置而不等待函数承诺(从 api 获得响应需要 5 到 10 秒)是否有一个 way/workaround 我可以使计时器到 0 时停止,等待 api 响应然后重新开始计数?
我想,你必须使用 setTimeout(),像这样
let time = 60;
async function callback() {
time = time - 1;
if (time === 0) {
await fetch('https://google.com');
time = 60;
}
setTimeout(callback, 1000)
}
callback()
您可以使用 while 循环获得所需的结果...
let waitTime = 3000
;(async ()=>{
console.log('Started')
while(true) {
await new Promise(res=>setTimeout(res,waitTime))
console.log('Waited', waitTime, 'ms')
let randTime = 1000 + Math.random()*1000
await new Promise(res=>setTimeout(()=>{console.log('your asnyc fun',randTime);res();},randTime)) // your async func
}
})()
基本上我有一个计时器,假设计时器从 60 秒开始,当它达到 0 时变为 0,它会发出 api 调用并重新启动计时器,我遇到的问题是当计时器达到 0 它只是重新启动而不等待承诺响应,在某种程度上我需要计时器在 0 处暂停等待响应然后再次从 60 开始计数,我尝试使用 clearInterval()
但它仅在第一个工作计时器停止后倒计时,这是我的以下代码,我认为它会更容易理解
setInterval(async () => {
document.querySelector('.timeh1').innerHTML = newInterval - i
i++
if(i >= newInterval){
await apiCallReload(currency)
i = 0
}
}, 1000)
如您所见,此函数每秒执行一次,当 运行 时间 (i) 达到计时器限制 (newInterval) 时,它将调用我的 apiCallReload()
函数,计时器将重置为0,但问题是计时器重置而不等待函数承诺(从 api 获得响应需要 5 到 10 秒)是否有一个 way/workaround 我可以使计时器到 0 时停止,等待 api 响应然后重新开始计数?
我想,你必须使用 setTimeout(),像这样
let time = 60;
async function callback() {
time = time - 1;
if (time === 0) {
await fetch('https://google.com');
time = 60;
}
setTimeout(callback, 1000)
}
callback()
您可以使用 while 循环获得所需的结果...
let waitTime = 3000
;(async ()=>{
console.log('Started')
while(true) {
await new Promise(res=>setTimeout(res,waitTime))
console.log('Waited', waitTime, 'ms')
let randTime = 1000 + Math.random()*1000
await new Promise(res=>setTimeout(()=>{console.log('your asnyc fun',randTime);res();},randTime)) // your async func
}
})()