javascript - 将 while 循环中的异步等待转换为 promise

标签 javascript async-await ecmascript-2017

我不知道如何将 while 循环中的异步等待功能转换为基于 promise 的实现。

repl 显示异步等待版本

https://repl.it/repls/IdealisticPepperyCoding

var dependency = false;

function checkDependency() {
  return new Promise(resolve => {
    setTimeout(() => {
      dependency = true;
      return resolve();
    }, 1000)
  });
}

async function isReady() {
    while(!dependency) {
      console.log('not loaded');
      await checkDependency();
    }
    console.log('loaded')
}

isReady();

最佳答案

如果我对你的理解正确,你想使用 Promises without 异步函数而不是 Promises with 异步函数,以及示例 checkDependency 实际上可能不会在所有情况下都设置 dependency = true,所以你想“循环”。

等效的功能可能看起来像这样,您可以在其中“递归”调用检查函数。但是,它实际上不会递归并导致堆栈溢出,因为调用是在异步回调中完成的:

var dependency = false;

function checkDependency() {
  return new Promise(resolve => {
    setTimeout(() => {
      dependency = true;
      return resolve();
    }, 1000)
  });
}

function isReady() {
  if (!dependency) {
    return checkDependency().then(isReady);
  }

  return Promise.resolve(true);
}

isReady().then(() => {
  console.log('loaded')
});

关于javascript - 将 while 循环中的异步等待转换为 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49118848/

相关文章:

javascript - 异步抛出 SyntaxError : Unexpected token (

javascript - 如何使用 eclipse-mars IDE 将 jquery 插件设置到我的 codeigniter 项目中

javascript - 使用 Promises 使用 sinon stub 对函数进行测试

javascript - 如何将值传递给 JS 函数,然后传递给 PHP 脚本

javascript - 如何用 promise 关闭文件句柄?

javascript - 调用具有默认参数的异步函数作为参数检查同步处理的函数?

javascript - ECMAScript 2017 : EscapeSequence in StringLiteral

javascript - 如果 Node devDependencies 嵌套在依赖项中,它们是否包含在发布中?

Swift 中的 C# 异步等待

c# - 异步绑定(bind)和 LINQ 查询挂起