运行Knex查询在文件和REPL中花费更长时间

时间:2014-04-22 06:28:22

标签: node.js asynchronous promise knex.js

我正在尝试将一些数据播种到数据库中:

// seed.js
var Knex = require("knex");
var database = require("./config").database;
var knex = Knex.initialize(database);

knex("users").insert({
    first_name: "John",
    last_name: "Doe"
}).exec(function (err, id) {
    console.log("Fulfilled", id);
});

// returns [ 1 ]

我的问题是,如果我把它放在一个文件中并使用node seed.js运行它,它会执行console.log然后它似乎等待更长时间(大约20秒)才返回shell提示符。在REPL中做同样的事情,结果是瞬时的。

如果我在shell中运行它并在REPL中执行此代码,我的代码会再次向命令提示符显示20秒,是否有原因?

1 个答案:

答案 0 :(得分:1)

默认情况下节点不会在脚本完全完成之前返回控制台,而在节点repl内部,它会在最后一行停止阻塞后立即返回repl。

在repl中你实际上在console.log打印之前得到了焦点,而在脚本中它还必须等待东西关闭,你可以通过在console.log之后添加process.exit(0)来加速它。