我要实现的是设置间隔并检查条件 - 第一次在一秒后,第二次 - 3 秒后,第三次 - 5 秒后,依此类推
- 1秒后检查
- 1 + 2s = 3s 后的下一次检查 1 + 2s
- + 2s = 5s 后的下一次检查
如何实现这样的事情?
const interval = setInterval(() => {
const params = new URLSearchParams(externalWindow.location.href);
const code = params.get('code');
if (code) {
clearInterval(interval);
externalWindow.close();
}
}, 1000);
您应该改用setTimeout
,每次+= 2000
初始延迟递增。
let timeout = setTimeout(
function check(delay) {
const params = new URLSearchParams(externalWindow.location.href);
const code = params.get('code');
if (code)
externalWindow.close();
else {
delay += 2000;
timeout = setTimeout(check, delay, delay);
}
},
1000,
1000
);
您并不严格需要那里的timeout
变量,但如果您想在该函数表达式之外的任何点clearTimeout(timeout)
,它会很方便。
你能告诉我我的代码有什么问题吗?
checkCode = (externalWindow) => {
let retry = true;
const params = new URLSearchParams(externalWindow.location.href);
const code = params.get('code');
if(code){
console.log('code and stop loop');
retry = false;
}
if (retry){
console.log('retry');
setTimeout(() => this.checkCode(externalWindow), 2000);
}
}
它只执行一次