Javascript RejectionDB node.js驱动程序未正确初始化全局连接变量
遇到了一个非常奇怪的问题,这可能是我的IDE WebStorm特有的,因为当通过终端中的节点执行时,我无法重现这个问题。在下面的示例中:Javascript RejectionDB node.js驱动程序未正确初始化全局连接变量,javascript,node.js,webstorm,rethinkdb,Javascript,Node.js,Webstorm,Rethinkdb,遇到了一个非常奇怪的问题,这可能是我的IDE WebStorm特有的,因为当通过终端中的节点执行时,我无法重现这个问题。在下面的示例中: r = require('rethinkdb'); var connection = null; r.connect({host: 'localhost', port: 28015}, function(err, conn) { if (err) throw err; connection = conn; }); console.log(c
r = require('rethinkdb');
var connection = null;
r.connect({host: 'localhost', port: 28015}, function(err, conn) {
if (err) throw err;
connection = conn;
});
console.log(connection);
当我尝试在回调外部记录结果时,我的连接全局变量为“null”。但是,当我从回调中记录对象时:
var connection = null;
r.connect({host: 'localhost', port: 28015}, function(err, conn) {
if (err) throw err;
connection = conn;
console.log(connection);
});
我显示了一个连接JSON对象。这似乎是一个我无法理解的简单范围问题。这是一种预期行为 Node.js使用JavaScript,因此以异步方式运行代码 在您的第一个代码片段中发生的是
- r是初始化的
- 您尝试打开一个连接
- 打印连接
- 在稍后的某个时刻,从回调中为连接分配conn
连接
对象的循环,直到其值不再为null吗?回调中的conn
返回对象不到一秒钟,但当我尝试编写此循环构造时,递归无法停止,出现“超过最大调用堆栈大小”错误。否,您的连接是在传递给r.connect
的回调中定义的。需要连接的代码应该在回调内部(或在此回调调用的函数内部)。