异步遍历函数

时间:2018-09-13 10:15:33

标签: javascript

我有一些要遍历的功能。

这是我所拥有的:

start() {
    this.loop();
}

one() {
    // Do stuff here
}

two() {
    // Do stuff here
}

loop() {
    setTimeout(() => {
        this.one();
        this.two();
        this.loop();
    }, 5000);
}

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

我该怎么做?

3 个答案:

答案 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);
}

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