gpt4 book ai didi

node.js - IntelliJ NodeJS 调试回调范围引用错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:18:13 27 4
gpt4 key购买 nike

我正在 Intellij 中调试 NodeJS 应用程序。我有一个如下所示的方法:

function(connection) {
connection.on('error', function(error) {
console.log('there is an error'); // breakpoint is on this line
});
}

命中断点时,connection 未定义,将 connection 放入“评估表达式”窗口中会产生“ReferenceError:连接未定义”。

在我看来,connection 正在被释放,因为它没有在回调中使用,但我正在调试应用程序,所以如何才能使其不被释放,除了添加行 localConnection = connection (它确实有效)。

这是另一个例子:

var foo = (function() {
var a = 'some value';
this.bar = function() {
console.log('bar'); // breakpoint is here
};
this.bar();
})();

这里,a 无法从调试器访问。

编辑:

为了澄清第二个示例,a 对于在 foo 外部声明的方法是私有(private)的,但在其他情况下则不然。例证:

var foo = (function() {
var a = 'Some value';
this.bar = function() {
console.log('a: ' + a); // breakpoint is here
};
this.bar();
})();

此示例确实打印“a:某个值”,表明 a 应该可以在该行中访问。事实上,只需将其添加到控制台日志中,它就可以在该行中保持可访问性,这表明它之前的不可访问性是由于垃圾收集或引用计数造成的,在调试环境中,我希望不那么严格,因为我希望保持查看调试时代码中不一定使用的变量值的能力。

这同样适用于第一个示例。当在代码中的回调内部使用 connection 时,它会暴露给调试器,但我试图使其即使在不使用代码的情况下也保持暴露状态。我怎么做?我非常肯定 Node 有一个运行时标志来实现这一点。

最佳答案

第一个例子,connection是一个事件发射器。所以当“错误”事件发生时,外部函数已经完成工作。所以你无法取回它。第二个例子是 IIFE “a”在某种程度上是一个私有(private)变量,即使看起来不是那样。

您可以使用全局变量来访问它们。我知道这看起来像是一个肮脏的解决方法。但无论如何它都有效,这是一个例子:

var m;
function(connection) {
m = connection;
connection.on('error', function(error) {
console.log('there is an error'); // breakpoint is on this line
console.log(m); // now you can access connection
});
}

关于node.js - IntelliJ NodeJS 调试回调范围引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799606/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com