Javascript RejectionDB node.js驱动程序未正确初始化全局连接变量

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

遇到了一个非常奇怪的问题,这可能是我的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(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
的回调中定义的。需要连接的代码应该在回调内部(或在此回调调用的函数内部)。