【问题标题】:Node js for loop timer用于循环计时器的节点 js
【发布时间】:2014-08-11 22:31:10
【问题描述】:

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

我在这里使用了几个数据库,每次我尝试为 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 应用程序时,插入仍在处理中。

显然我这里出了点问题,但我不知道是什么。我严重依赖计时器数据,我需要找到一种方法来正确计时这些操作。帮助?

【问题讨论】:

    标签: javascript node.js postgresql timer


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 但是如果我做类似 query.on("end", some callback) 的事情,每个查询都会做一些事情,它会 LAGGGG。有没有办法只识别最后一个查询?
    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多