javascript - 用于轮询的 javascript async 和 setInterval
问题描述
我想要最容易理解的语法来轮询标志并在它为真时返回,我知道下面的代码片段不起作用,如果你明白我的想法,什么语法可以使它起作用?
async function watch(flag) {
let id = setInterval(function(){
if (flag === true) {
clearInterval(id);
}
}, 1000);
return flag;
}
解决方案
- 如果要轮询值为原始值的变量,则需要在函数外部定义它,否则无法更改。
- 如果您想在该条件完成时解决一个 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");
});
推荐阅读
- amazon-ec2 - 如何将社区版 sonarqube aws 实例替换为开发者版?
- swift - 如何在swift中选择aTableView部分中的单元格
- python - 站点包文件夹存在于 python2 但不存在于 python3
- shopify - Shopify 产品/更新 webhook 在库存更改时触发
- android - ConstraintSet.connect() 中的边距参数是 px 还是 dp?
- asp.net-core - 将启用 OData 的 api 控制器转换为将输出 json 格式为 TitleCase 而不是驼峰式大小写
- graphics2d - 需要合并 2 个 eps 文件以在 Java 中生成 output.eps
- php - 从 PHP 脚本在 odoo 中制作 POS
- javascript - 使用 Pulumi 创建简单的 Azure HDInsight Spark 集群时出错
- javascript - 在条形图上显示负值