javascript - 轮询时承诺异步等待
问题描述
我正在尝试将使用承诺(和轮询)的函数转换为异步函数,但我不确定它是如何工作的。
我有这个:
function myFunction() {
return new Promise(resolve => {
// stuff here ...
var poll = setInterval(function() {
if (condition) {
clearInterval(poll);
resolve("done");
}
}, 100);
});
}
..但我不确定在await
这里做什么:
async function myFunction() {
// stuff here ...
var poll = setInterval(function() {
if (condition) {
clearInterval(poll);
// await what?
}
}, 100);
}
解决方案
setInterval
不适合异步等待。最好使用在循环的每次迭代中再次调用的 setTimeout 的“承诺”版本。
const myFunction = async = () => {
let condition = false;
while (!condition) {
await new Promise(resolve => setTimeout(resolve, 100));
condition = processCondition();
}
}
推荐阅读
- verilog - vivado仿真报错:达到迭代限制10000
- node.js - 从 URL Node.js 获取 mongodb 文档的字段
- python - Python 环境和 Slurm (srun/sbatch) 的问题
- python - 我可以从 QT Design Studio 导出 .ui 文件吗?
- ios - 如何从另一个视图控制器中的变量中获取值
- r - Mac 中的 rgl 安装:未找到 X11
- kotlin - 从 Facebook Graph-API 获取大型个人资料图片
- docker - 带有 Harbor 的 Docker 集线器缓存
- python - Pandas - 将字典键和值映射到新列
- tensorflow - 运行drums_rnn_train 在第一个检查点调用检查点侦听器时挂起