我試圖有一個異步函式,如果它被召回就會重置。此函式鏈接到多個按鈕,并觸發一個 div 作為通知覆寫框。
我想,當再次呼叫 callAlert() 函式時,它會重置 clearAlert() 上的超時。我試圖在 newAlert 被呼叫時添加 1500 毫秒,但我假設當任何按鈕(觸發 callAlert())被點擊時,它已經移到 clearAlert() 承諾上。要么如此,要么隨著它的積累,我最終的等待時間越來越長。
任何建議都會很棒。
let alertActive = false;
let alertCd = 0;
function newAlert(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
alert_pop.classList.remove("alert_pop");
alertActive=true;
alertCd = 1500
resolve();
} , 100);
});
}
function clearAlert(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
alert_pop.classList.add("alert_pop");
alert_string.innerHTML="";
resolve();
} , alertCd);
alertActive=false;
});
}
async function callAlert(){
await newAlert();
await clearAlert();
}
uj5u.com熱心網友回復:
創建一個可重置的計時器
如果你想創建一個可以重置的計時器,
- 保存回傳的 timeoutID
setTimeout()。 - 每當需要創建新警報時,請使用 取消最后一個計時器
clearTimeout(),然后創建新的超時。
取消定時器
如果您需要取消現有計時器,請使用clearTimeout()。現在,clearAlert()創建自己的 Promise 并嘗試設定自己的超時。您應該更改為clearAlert()不回傳 Promise(至少目前是這樣。看起來您可能正在嘗試延遲取消)。
首先,在 中newAlert(),將resolve 或reject 從活動的Promise 保存到可訪問的范圍clearAlert()。然后,在clearAlert()、 呼叫clearTimeout()和resolve()或reject()(取決于您要做什么)。
uj5u.com熱心網友回復:
為確保 JavaScript 函式不會每隔幾秒被呼叫一次,您可以在lodash 中可用的“ debounce ”函式中運行 wrap 。
這是一個很好解釋的例子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/374105.html
標籤:javascript 异步 承诺
上一篇:多個異步呼叫之間的兩個鏈式呼叫
