如何确保使用Javascript正确关闭函数?
有人能解释一下为什么我要处理这50条记录,但我从来没有得到如何确保使用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:
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
的回调,以便它启动这是一个建议,不是问题的答案,所以应该是对问题的评论。