最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

关于NodeJS中的循环引用详解

来源:懂视网 责编:小采 时间:2020-11-27 21:53:34
文档

关于NodeJS中的循环引用详解

关于NodeJS中的循环引用详解:最近在用node的时候排查一个问题排查了半天,最终发现是循环引用导致的问题,故在此记录一下。 场景复现 出现问题场景比较简单,一共四个类: parent.ts child.ts child_2.ts util.ts export abstract class Parent { abstr
推荐度:
导读关于NodeJS中的循环引用详解:最近在用node的时候排查一个问题排查了半天,最终发现是循环引用导致的问题,故在此记录一下。 场景复现 出现问题场景比较简单,一共四个类: parent.ts child.ts child_2.ts util.ts export abstract class Parent { abstr

#寻找原因

说的是这个父类是一个undefined,很明显就是没有初始化。

一开始我觉得很奇怪,明明在child_2这个文件里已经import了parent,为什么会是undefined呢?后来debug查了一下代码的堆栈,恍然大悟:

入口文件->child.ts->parent.ts->util.ts->child_2.ts->parent.ts

很明显这里存在着一个循环引用,当我们在加载child_2.ts这个文件的时候,parent.ts还处在未加载完的状态。

我们可以去 官网看一下node中是如何处理循环引用的 。

通过官网我们可以知道,对于这样的循环引用,在child_2.ts加载parent.ts的时候,会去缓存中寻找,而由于parent.ts还未加载完成,所以缓存中会是一个空对象了,官网中用的语句是 an unfinished copy of the a.js 。

解决方案

知道原因之后,解决方案也就变得清晰了起来,一句话搞定,将parent.ts中的import语句放在后面:

export abstract class Parent {

 abstract hello(): string;

 func(): string {
 return Util.useChildInSameCase();
 }
}

import {Util} from "./util";

这样在加载parent.ts的时候,就会先export对象,然后再import所需要的util.ts了。

总结

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

关于NodeJS中的循环引用详解

关于NodeJS中的循环引用详解:最近在用node的时候排查一个问题排查了半天,最终发现是循环引用导致的问题,故在此记录一下。 场景复现 出现问题场景比较简单,一共四个类: parent.ts child.ts child_2.ts util.ts export abstract class Parent { abstr
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top