将 while 循环中的异步等待转换为承诺

Zac*_*cky 3 javascript async-await ecmascript-2017

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

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();
Run Code Online (Sandbox Code Playgroud)

Jac*_*cob 6

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

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

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')
});
Run Code Online (Sandbox Code Playgroud)