哪种方式更方便在无限循环中执行异步函数,每次执行之间都休眠(Node.js / Vanilla JS)
Posted
技术标签:
【中文标题】哪种方式更方便在无限循环中执行异步函数,每次执行之间都休眠(Node.js / Vanilla JS)【英文标题】:Which way is more convenient execute an async function in endless loop with a sleep between each execution (Node.js / Vanilla JS) 【发布时间】:2019-07-22 13:24:19 【问题描述】:我写了一些异步函数,它做了一些事情然后什么也不返回。 在函数结束执行后,我想等待几秒钟,然后再执行相同的例程。
流程是这样的: 1.执行功能 2.等到执行完成 3.等待/睡眠一段时间 4. 从第 1 步重新开始
函数执行的无限循环,休眠并重新开始。
现在我的问题是下面的 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();
)();
【问题讨论】:
那个inner
好像没必要,和outer
一样。
【参考方案1】:
第二个版本看起来更短、更简洁、更易于理解,并且还允许您正确处理错误。但是,我建议将DELAY_IN_MILLISECONDS
作为参数传递给sleep
,而不是使用全局常量。
【讨论】:
以上是关于哪种方式更方便在无限循环中执行异步函数,每次执行之间都休眠(Node.js / Vanilla JS)的主要内容,如果未能解决你的问题,请参考以下文章