Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确保使用Javascript正确关闭函数?_Javascript_Node.js - Fatal编程技术网

如何确保使用Javascript正确关闭函数?

如何确保使用Javascript正确关闭函数?,javascript,node.js,Javascript,Node.js,有人能解释一下为什么我要处理这50条记录,但我从来没有得到console.log(“所有记录都已处理”)到控制台 这就像我关闭一个功能太早或太迟。处理回拨时,最好的方法是什么,因为我确信这就是为什么我没有处理“所有记录”。我将节点v0.10.26与NPM oracle插件一起使用 var oracle = require('oracle'); var connectData = { hostname: "127.0.0.1", port: 1521, database:

有人能解释一下为什么我要处理这50条记录,但我从来没有得到
console.log(“所有记录都已处理”)到控制台

这就像我关闭一个功能太早或太迟。处理回拨时,最好的方法是什么,因为我确信这就是为什么我没有处理
“所有记录”
。我将节点v0.10.26与NPM oracle插件一起使用

var oracle = require('oracle');

var connectData = {
    hostname: "127.0.0.1",
    port: 1521,
    database: "xe", // System ID (SID)
    user: "user",
    password: "password"
};

oracle.connect(connectData, function(err, connection) {
    if (err) {
        console.log("Error connecting to db:", err);
        return;
    }
    connection.setPrefetchRowCount(50);
    var reader = connection.reader("SELECT * FROM CARS", []);
    function doRead(cb) {
        reader.nextRow(function(err, row) {
            if (err) return cb(err);
            if (row) {
                // do something with row
                console.log("got " + JSON.stringify(row));
                // recurse to read next record
                return doRead(cb)
            } else {
                // we are done
                return cb();
            }
        });
    }
    doRead(function(err) {
        if (err) throw err; // or log it
        console.log("all records processed");
    });
});

connectData
的右大括号后面没有分号会有区别吗?就我个人而言,我只是设置了越来越多的控制台日志,直到我找到了把一切都搞砸的线索。如果可以,也可以使用断点。

对于这些分步回调,我建议您使用来管理回调金字塔。

谢谢,我添加了semi。但奇怪的是,每次您开始记录它时,它的行为都会有所不同,因此可能我遗漏了另一个?connectData后面的分号对控制流没有任何影响。事实上,分号几乎在任何情况下都是无用的,除非下一行的第一个字符是
[
)。请参阅。您的代码似乎没有什么问题,也许
始终是“真实的”?不,这是最奇怪的事情,您取出了最后一个命令控制台。log(“所有记录已处理”);预回迁行可以工作,但连接没有关闭,必须在某个地方使用分号!这是一个不确定的结果,但是您是否尝试过放置doRead()函数在根命名空间中,而不是嵌入到oracle中。connect?我同意Koen的观点。我认为没有什么明显的错误。不过,有一件事:我必须处理一些会吞噬异常的系统。在您的情况下,我要做的是修改传递给
reader.nextRow
的回调,以便它启动这是一个建议,不是问题的答案,所以应该是对问题的评论。