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;
}
  • 如果要轮询一个值为原始值的变量,则需要在函数外定义它,否则无法更改。
  • 如果你想在条件完成时有一个承诺解决,那么你必须明确地创建它。 asyncawait 是管理 现有 承诺的工具。

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