重新激活时强制重置承诺
Force reset promise when re-activated
我正在尝试拥有一个异步功能,如果它被召回,它会重置。此功能链接到多个按钮,并触发一个 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();
}
为了确保 JavaScript 函数不会每隔几秒调用一次以上,您可以 运行 将其包装在 lodash 中可用的“去抖动”函数中。
这里有一个很好的解释example。
创建一个可重置的计时器
如果你想创建一个可以重置的计时器,
- 保存由
setTimeout()
编辑的超时 ID return。
- 任何时候需要创建新警报时,使用
clearTimeout()
取消最后一个计时器,然后创建新的超时。
取消定时器
如果您需要取消现有计时器,请使用clearTimeout()
。现在,clearAlert()
创建自己的 Promise 并尝试设置自己的超时。您应该将 clearAlert()
更改为 return Promise(至少,目前如此。看起来您可能正在尝试延迟取消)。
首先,在 newAlert()
中,将活动 Promise 中的 resolve 或 reject 保存到 clearAlert()
可访问的范围。然后,在 clearAlert()
中调用 clearTimeout()
和 resolve()
或 reject()
(取决于您要执行的操作)。
我正在尝试拥有一个异步功能,如果它被召回,它会重置。此功能链接到多个按钮,并触发一个 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();
}
为了确保 JavaScript 函数不会每隔几秒调用一次以上,您可以 运行 将其包装在 lodash 中可用的“去抖动”函数中。
这里有一个很好的解释example。
创建一个可重置的计时器
如果你想创建一个可以重置的计时器,
- 保存由
setTimeout()
编辑的超时 ID return。 - 任何时候需要创建新警报时,使用
clearTimeout()
取消最后一个计时器,然后创建新的超时。
取消定时器
如果您需要取消现有计时器,请使用clearTimeout()
。现在,clearAlert()
创建自己的 Promise 并尝试设置自己的超时。您应该将 clearAlert()
更改为 return Promise(至少,目前如此。看起来您可能正在尝试延迟取消)。
首先,在 newAlert()
中,将活动 Promise 中的 resolve 或 reject 保存到 clearAlert()
可访问的范围。然后,在 clearAlert()
中调用 clearTimeout()
和 resolve()
或 reject()
(取决于您要执行的操作)。