我有一些要遍历的功能。
这是我所拥有的:
start() {
this.loop();
}
one() {
// Do stuff here
}
two() {
// Do stuff here
}
loop() {
setTimeout(() => {
this.one();
this.two();
this.loop();
}, 5000);
}
如果需要应用程序,我需要它在后台循环而不停止流程。
我该怎么做?
答案 0 :(得分:0)
由于JavaScript本质上是单线程,因此没有像在C#这样的多线程语言中那样在“主”线程上并行运行函数的事情。
但是,您可以使用Workers
。大多数现代的浏览器都支持此功能,使您可以启动可以运行脚本的新JavaScript进程。
尽管要使用它,您需要在新文件(例如background.js)中隔离要在后台运行的功能。然后,将其放入start()
函数中,即可创建一个Worker:
start() {
var backgroundWorker = new Worker('background.js');
}
了解有关工作人员https://developer.mozilla.org/en-US/docs/Web/API/Worker
的更多信息答案 1 :(得分:0)
您可以像这样使用async/await
。这是基本的承诺。
function start() {
loop();
}
function one(){
// do something
}
function two() {
// do something
}
function loop() {
setTimeout(async () => {
await one();
await two();
await loop();
}, 1000);
}
答案 2 :(得分:-1)
您可以使用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);
}
当然,如果运行此代码,最终将导致无限循环,因此需要添加退出条件和错误处理。