Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Node.js 为什么使用“时会有如此奇怪的行为?”;要求;在NodeJS?_Node.js - Fatal编程技术网

Node.js 为什么使用“时会有如此奇怪的行为?”;要求;在NodeJS?

Node.js 为什么使用“时会有如此奇怪的行为?”;要求;在NodeJS?,node.js,Node.js,当我在ClassB中导入ClassA,然后在ClassB中导入ClassA时,导入的ClassA是一个空对象。为了演示,我有以下3个文件: ClassA.js const ClassB=require('./ClassB'); 甲级{ 静态测试(){ ClassB.test(); } } module.exports=ClassA; ClassB.js const ClassA=require('./ClassA'); B类{ 静态测试(){ 日志('ClassA.test',ClassA.t

当我在ClassB中导入ClassA,然后在ClassB中导入ClassA时,导入的ClassA是一个空对象。为了演示,我有以下3个文件:

ClassA.js

const ClassB=require('./ClassB');
甲级{
静态测试(){
ClassB.test();
}
}
module.exports=ClassA;
ClassB.js

const ClassA=require('./ClassA');
B类{
静态测试(){
日志('ClassA.test',ClassA.test);
}
}
module.exports=ClassB;
index.js

const ClassA=require('./ClassA');
ClassA.test();

当我运行
node index.js
时,我希望在控制台中看到
ClassA.test函数
,但它会输出
ClassA.test undefined
。它是一些未记录的东西,还是一个bug?

您有一个循环依赖关系。解决方案是使用第三个类,它将同时需要这两个类,并使用
ClassA
ClassB
中的任何代码,反之亦然

const ClassA = require('./ClassA');
const ClassB = require('./ClassB');

class ClassC {
    static test() {
        ClassA.test();
        ClassB.test();
    }
}
当我运行node index.js时,我希望在中看到ClassA.test函数 控制台,但它输出ClassA.test undefined。是一些吗 没有记录的东西,还是一个bug

不,这不是一个bug,也不是没有记录的

您可以在此处阅读有关如何处理的更多信息:


您还可以执行延迟加载,并将解决此特定情况下的问题。但在大多数情况下,循环引用是代码编写糟糕的症状

class ClassB {
    static test() {
        const ClassA = require('./ClassA')
        console.log('ClassA.test', ClassA.test);
    }
}

module.exports = ClassB;

你有一个循环依赖。解决方案是使用第三个类,它将同时需要这两个类,并使用
ClassA
ClassB
中的任何代码,反之亦然

const ClassA = require('./ClassA');
const ClassB = require('./ClassB');

class ClassC {
    static test() {
        ClassA.test();
        ClassB.test();
    }
}
当我运行node index.js时,我希望在中看到ClassA.test函数 控制台,但它输出ClassA.test undefined。是一些吗 没有记录的东西,还是一个bug

不,这不是一个bug,也不是没有记录的

您可以在此处阅读有关如何处理的更多信息:


您还可以执行延迟加载,并将解决此特定情况下的问题。但在大多数情况下,循环引用是代码编写糟糕的症状

class ClassB {
    static test() {
        const ClassA = require('./ClassA')
        console.log('ClassA.test', ClassA.test);
    }
}

module.exports = ClassB;

您有一个循环依赖项,因此Node无法确定应该首先运行哪个模块的顶级代码-其中一个模块需要首先运行其顶级代码,以便导出某些内容,以便另一个模块可以通过
require
导入它。但是如果两者都依赖于另一个,那么运行的第一个将有其
require
调用,以解析另一个
未定义的


最好的解决方案是重构它以避免循环依赖。

您有一个循环依赖,因此,节点无法确定哪个模块的顶级代码应该首先运行-其中一个模块需要先运行其顶级代码,以便导出某些内容,以便另一个模块可以通过
require
导入。但是如果两者都依赖于另一个,那么运行的第一个将有其
require
调用,以解析另一个
未定义的


最好的解决方案是重构它以避免循环依赖。

是的,在
test()
方法中使用
const ClassA=require('./ClassA')
,这正是我不久前修复它的方法。我只是很感兴趣,它为什么会发生。是的,当你第一次遇到错误时有点困惑,但这是有道理的:)。很高兴能帮上忙。我刚刚意识到为什么我要问它是没有文档记录的还是一个bug:NodeJS通常非常慷慨地显示警告/错误,但当循环依赖发生时,它保持沉默。它只是提供了一个损坏的对象,没有说任何有点意外的行为。我同意这一点,警告肯定是积极的。是的,在
test()
方法中使用
const ClassA=require('./ClassA')
,这正是我不久前修复它的方式。我只是很感兴趣,它为什么会发生。是的,当你第一次遇到错误时有点困惑,但这是有道理的:)。很高兴能帮上忙。我刚刚意识到为什么我要问它是没有文档记录的还是一个bug:NodeJS通常非常慷慨地显示警告/错误,但当循环依赖发生时,它保持沉默。它只是提供了一个损坏的对象,没有说任何有点意外的行为。我同意这一点,警告肯定是积极的。