异步循环遍历函数



我有几个函数正在循环。

这是我所拥有的:

start() {
this.loop();
}
one() {
// Do stuff here
}
two() {
// Do stuff here
}
loop() {
setTimeout(() => {
this.one();
this.two();
this.loop();
}, 5000);
}

如果应用程序,我需要它在后台循环而不停止流。

我该怎么做?

由于 JavaScript 本质上是单线程的,因此没有像在 C# 等多线程语言中那样与"主"线程并行运行函数这样的事情。

但是,您可以做的是使用Workers.大多数现代浏览器都支持此功能,允许您启动可以运行脚本的新 JavaScript 进程。

为了使用它,您需要将要在后台运行的功能隔离在新文件(例如 background.js(中。然后,您将通过将其放入start()函数来创建工作线程:

start() {
var backgroundWorker = new Worker('background.js');
}

阅读更多关于工人 https://developer.mozilla.org/en-US/docs/Web/API/Worker

的信息

你可以像这样使用async/await。这是基本的,然后是承诺。

function start() {
loop();
}
function one(){
// do something
}
function two() {
// do something
}
function loop() {
setTimeout(async () => {
await one();
await two();
await loop();
}, 1000);
}

你可以使用 Promises,如下所示:

one() {
return new Promise(resolve=>{
// Do stuff here
resolve();
})
}
two() {
return new Promise(resolve => {
// Do stuff here
resolve();
})
}
loop() {
setTimeout(() => {
this.one()
.then(()=>this.two())
.then(()=>loop())
}, 5000);
}

当然,如果运行此代码,最终会得到无限循环,因此需要添加退出条件和错误处理。

最新更新