节点js用于循环计时器

时间:2014-08-11 14:19:27

标签: javascript node.js postgresql timer

我试图测试Node.js中实现的哪个数据库在某些任务中的时间最快。

我在这里使用几个DB,每次我尝试计时for循环时,计时器很快就会结束,但任务实际上并没有结束。这是代码:

console.time("Postgre_write");

    for(var i = 0; i < limit; i++){
    var worker = {          
        id: "worker" + i.toString(),
        ps: Math.random(),
        com_id: Math.random(),
        status: (i % 3).toString()
    }
    client.query("INSERT INTO test(worker, password, com_id, status) values($1, $2, $3, $4)", [worker.id, worker.ps, worker.com_id, worker.status]);
}

console.timeEnd("Postgre_write");
当我尝试几百次时,我认为结果是真的。但是当我测试更高的数字(如100,000)时,控制台输出500毫秒,但是当我检查PGadmin应用程序时,插件仍在处理中。

显然我在这里弄错了,但我不知道是什么。我非常依赖计时器数据,我需要找到一种方法来正确计算这些操作。救命?

1 个答案:

答案 0 :(得分:2)

Node.js是异步的。这意味着您的代码不一定按照您编写的顺序执行。

看看这篇文章http://www.i-programmer.info/programming/theory/6040-what-is-asynchronous-programming.html,它提供了异步编程的相当不错的解释。

在您的代码中,您的查询将被发送到数据库并开始执行。由于Node是异步的,它不会等待该行完成执行,而是转到下一行(停止计时器)。

当您的查询运行完毕后,将发生回调并通知Node查询已完成。如果指定回调函数,它将在该点运行。考虑事件驱动的编程,查询的完成是一个事件。

要解决您的问题,请在查询的回调函数中停止计时器。