javascript - 哪种方式更方便在无限循环中执行异步函数,并在每次执行之间进行 sleep (Node.js/Vanilla JS)

标签 javascript node.js asynchronous delay sleep

我编写了一些异步函数,它执行某些操作然后不返回任何内容。 函数结束执行后,我想等待几秒钟,然后执行相同的例程。

流程是这样的: 1. 执行函数 2.等待执行完成 3.等待/ sleep 一段时间 4.从第1步开始

函数执行的无限循环, sleep 并重新开始。

现在我的问题是下面的 2 个代码块中哪一个更适合使用:

选项 1:

const MEANING_OF_LIFE = 42;
const DELAY_IN_MILLISECONDS = 1000;


const whatsTheMeaningOfLife = async () => {
  console.log(MEANING_OF_LIFE);
}

const outter = fn => {

  inner = async fn => {
    await fn();
    setTimeout(() => outter(fn), DELAY_IN_MILLISECONDS);
  };

  inner(fn);
};

(() => {
  outter(whatsTheMeaningOfLife);
})();

选项 2:

const MEANING_OF_LIFE = 42;
const DELAY_IN_MILLISECONDS = 1000;


const whatsTheMeaningOfLife = () => {
  console.log(MEANING_OF_LIFE);
}

const sleep = () => {
  return new Promise((resolve, ) => {
    setTimeout(() => resolve(), DELAY_IN_MILLISECONDS);
  });
};

(async () => {
  while(true) {
    await whatsTheMeaningOfLife();
    await sleep();
  }
})();

最佳答案

第二个版本看起来更短、更清晰、更容易理解,并且还允许您正确处理错误。不过,我建议将 DELAY_IN_MILLISECONDS 作为参数传递给 sleep,而不是使用全局常量。

关于javascript - 哪种方式更方便在无限循环中执行异步函数,并在每次执行之间进行 sleep (Node.js/Vanilla JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54928912/

相关文章:

javascript - 是否可以在浏览器中创建不安全的数组缓冲区?

node.js - 无法使用 Protractor Chai 验证元素

javascript - 如何设置node.js cron 作业来制作一些东西?

Javascript/Sails.js Controller 等待服务调用异步函数

javascript - 当一系列 readFile 调用在 node.js 中完成时如何运行函数?

javascript - 应用程序脚本中多个数组的总和对象

javascript - 使用循环将数组值分配给元素

javascript - 如何使用关闭按钮创建此多个动态 id 特定的 Accordion ?

javascript - React + Redux - 当输入具有来自状态的值时,输入 onChange 非常慢

c# - 如何在表单关闭时停止异步方法