javascript async 和 setInterval 用于轮询
javascript async and setInterval for polling
我想要最容易理解的语法来轮询一个标志,return 当它为真时,我下面的代码片段不起作用我知道,如果你明白我的想法,让它起作用的语法是什么?
async function watch(flag) {
let id = setInterval(function(){
if (flag === true) {
clearInterval(id);
}
}, 1000);
return flag;
}
- 如果要轮询一个值为原始值的变量,则需要在函数外定义它,否则无法更改。
- 如果你想在条件完成时有一个承诺解决,那么你必须明确地创建它。
async
和 await
是管理 现有 承诺的工具。
let flag = false;
function watchFlag() {
return new Promise(resolve => {
let i = setInterval(() => {
console.log("Polling…");
if (flag) {
resolve();
clearInterval(i);
}
}, 500);
});
}
setTimeout(() => {
flag = true;
}, 1500);
console.log("Watching the flag");
watchFlag().then(() => {
console.log("The flag has changed");
});
如果您不知道标志何时更改(10 秒或 10 分钟),您可以改用 setter。可能是一种反模式,但您的问题并没有真正向我们展示您将如何在代码中使用此标志。
const flagsObject = {
set flag(stat) {
this._flag = stat;
if (stat) {
// call the function you need to call when flag is true
// you could add additional condition if you only want to run the function
// when the flag is switched
doSomething()
}
},
get flag() {
return this._flag;
}
};
flagsObject.flag = true; // doSomething() will be called
我想要最容易理解的语法来轮询一个标志,return 当它为真时,我下面的代码片段不起作用我知道,如果你明白我的想法,让它起作用的语法是什么?
async function watch(flag) {
let id = setInterval(function(){
if (flag === true) {
clearInterval(id);
}
}, 1000);
return flag;
}
- 如果要轮询一个值为原始值的变量,则需要在函数外定义它,否则无法更改。
- 如果你想在条件完成时有一个承诺解决,那么你必须明确地创建它。
async
和await
是管理 现有 承诺的工具。
let flag = false;
function watchFlag() {
return new Promise(resolve => {
let i = setInterval(() => {
console.log("Polling…");
if (flag) {
resolve();
clearInterval(i);
}
}, 500);
});
}
setTimeout(() => {
flag = true;
}, 1500);
console.log("Watching the flag");
watchFlag().then(() => {
console.log("The flag has changed");
});
如果您不知道标志何时更改(10 秒或 10 分钟),您可以改用 setter。可能是一种反模式,但您的问题并没有真正向我们展示您将如何在代码中使用此标志。
const flagsObject = {
set flag(stat) {
this._flag = stat;
if (stat) {
// call the function you need to call when flag is true
// you could add additional condition if you only want to run the function
// when the flag is switched
doSomething()
}
},
get flag() {
return this._flag;
}
};
flagsObject.flag = true; // doSomething() will be called