javascript - 有没有办法在没有await关键字的情况下调用sleep()?

标签 javascript node.js asynchronous async-await

我想调用 sleep() 函数,但前面不带 await 关键字。为了实现这一目标,我尝试使用另一个带有回调的 wrapper-async 函数 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);

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

最佳答案

如果您不想使用外部包,并且异步由于某种原因无法工作,sleep 包现在建议使用内置的 Atomics.wait(包含在 Node 中)在 Node 9.3 之后),如下所示:

function msleep(n) {
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, n);
}
function sleep(n) {
  msleep(n*1000);
}

我已经在生产中成功地使用了它。

来源:sleep

关于javascript - 有没有办法在没有await关键字的情况下调用sleep()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099454/

相关文章:

javascript - 使用 javascript 计算重复单词数

javascript - 获取 url 的 Angular 变化

node.js - Node Express不执行动态添加的中间件

node.js - 如何使用免费的 Dyno 在 Heroku 上使用 NodeJS 进行代理?

javascript - 以它们之间的延迟运行操作

javascript - 将光标设置为输入框的开头

javascript - `The function $(Window) is undefined` jquery 错误

javascript - TypeError : fn is not a function. module.exports 中两个函数之间的差异

c# - 单元测试无限轮询方法

java - 如何使用 Netty 异步发送多个 http 请求?