首页 > 解决方案 > 有没有办法在没有 await 关键字的情况下调用 sleep() ?

问题描述

我想在没有关键字sleep()的情况下调用函数。await为了实现这一点,我尝试了另一个带有回调的包装异步函数sleepAsync(x, callback),但它没有用。

这是我的代码 -

function color() {
  let string1 = "yellow yeelow";
  console.log(string1);
  let string2 = "blu glu";
  console.log(string2);
  let string3 = "green freen";
  console.log(string3);
}

async function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms * 1000));
}

现在它可以正常工作的函数调用 -

async function fcall(loop = 2) {
  for (let x = loop; x > 0; x--) {
    color();
    await sleep(2);
  }
}

fcall(4);

上述调用方式,每次迭代等待2秒再继续。

下面的代码是sleep()不等待 2 秒的地方 -

async function sleepAsync(x, callback) {
    callback();
    await sleep(x);
  }

  function gcall(loop = 2) {
    for (let x = loop; x > 0; x--) {
      sleepAsync(2, color);
    }
  }

  gcall(4);

在这里可以做什么?我在哪里犯错了?

标签: javascriptnode.jsasynchronousasync-await

解决方案


你可以尝试从 npm 打包,在https://www.npmjs.com/package/sleepsleep看到它。


推荐阅读