首页 > 解决方案 > 用于轮询的 javascript async 和 setInterval

问题描述

我想要最容易理解的语法来轮询标志并在它为真时返回,我知道下面的代码片段不起作用,如果你明白我的想法,什么语法可以使它起作用?

async function watch(flag) {
    let id = setInterval(function(){
        if (flag === true) {
            clearInterval(id);
        }
    }, 1000);
    return flag;
}

标签: javascriptasync-awaitsetintervalclearinterval

解决方案


  • 如果要轮询值为原始值的变量,则需要在函数外部定义它,否则无法更改。
  • 如果您想在该条件完成时解决一个 Promise,那么您必须显式地创建它。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");
});


推荐阅读