基本上我有一個計時器,假設計時器從 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 秒)有沒有一種方法/解決方法可以讓計時器在達到 0 時停止,等待 api 回應然后重新開始計數?
uj5u.com熱心網友回復:
我想,你必須像這樣使用 setTimeout(),smth
let time = 60;
async function callback() {
time = time - 1;
if (time === 0) {
await fetch('https://google.com');
time = 60;
}
setTimeout(callback, 1000)
}
callback()
uj5u.com熱心網友回復:
您可以使用 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
}
})()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/477782.html
標籤:javascript 异步 异步等待
