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

Convert async await in while loop to promises

我不知道如何将 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();

您不需要 while 循环。

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

  • 你不需要 return recolve() 直接调用即可。
  • 在函数isReady
  • 中调用函数then

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

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

isReady();

如果我对你的理解正确,你想使用 Promises without async functions 而不是 Promises with async functions,并且示例 checkDependency 实际上可能不会在所有情况下都设置 dependency = true,因此您想要 "loop."

等效功能可能类似于这样,其中您 "recursively" 调用检查函数。但是,它实际上不会递归并导致堆栈溢出,因为调用是在异步回调中完成的:

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')
});