我正在编写一个javascript HTML5 phonegap应用程序。 我正在使用SQLite来存储数据。 为了提高性能,我正在异步进行数据库插入,即我不需要在前一个数据库操作的回调中调用下一个操作。 在内部,我相信javascript正在为每个操作创建一个工作人员,因此可以说是多线程。
现在的问题是,我怎么知道所有工人都完成了他们的任务?例如,为了告诉用户所有数据都已保存?
答案 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只能作为单线程实现,因此您无需担心。