检测正在运行的javascript工作者

时间:2012-01-11 18:55:12

标签: javascript multithreading cordova

我正在编写一个javascript HTML5 phonegap应用程序。 我正在使用SQLite来存储数据。 为了提高性能,我正在异步进行数据库插入,即我不需要在前一个数据库操作的回调中调用下一个操作。 在内部,我相信javascript正在为每个操作创建一个工作人员,因此可以说是多线程。

现在的问题是,我怎么知道所有工人都完成了他们的任务?例如,为了告诉用户所有数据都已保存?

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的请求,那么您正在排队数据库插入以异步运行,并且您希望能够稍后再回来查看所有请求是否已完成。我会做这样的事情:

function asyncTask() {
        //
        // Do real work here
        //
        runningTasks--
}


//in your init section, setup a global variable to track number of tasks    
runningTasks = 0

//when you need to create a new task, increment the counter
runningTasks++;
setTimeout (asyncTask,1);



if (runningTasks > 0) {
    //something still running
} else {
    //all tasks are done.
}

在另一种语言中,您需要在测试和设置runningTasks变量时担心竞争条件,但是AFAIK,Javascript只能作为单线程实现,因此您无需担心。