博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js之循环依赖
阅读量:6395 次
发布时间:2019-06-23

本文共 937 字,大约阅读时间需要 3 分钟。

在Node.js中有可能会出现循环依赖的问题,在此做一个简单的记录

假如有一个模块A:

exports.loaded = false; const b = require('./b'); module.exports = {  bWasLoaded: b.loaded,  loaded: true };

假如有一个模块B:

exports.loaded = false; const a = require('./a'); module.exports = {  aWasLoaded: a.loaded,  loaded: true };

我们在main.js中调用他们:

const a = require('./a'); const b = require('./b'); console.log(a); console.log(b);

这就是一个循环依赖的问题,a中加载了b,b中加载了a,我们看一下输出结果:

{ bWasLoaded: true, loaded: true }{ aWasLoaded: false, loaded: true }

可以发现,虽然循环依赖了 ,但是并没有造成死循环,这是怎么做到的呢?

原理就是模块加载过程的缓存机制,Node对模块的加载做了缓存的,可以通过require.cache访问到,这样看来上边的内容就比较好理解了 。

在加载a的时候,a是没有缓存的,当a的代码走到加载b的时候,就进入了模块b中,依次调用代码,当在b中加载a的时候,这时候a已经被缓存了,因此会使用缓存值,这个时候b加载后的结果是:

{    aWasLoaded: false,    loaded: true}

b加载完成后,a模块继续走自己的代码,因此这是a的结果就是:

{    aWasLoaded: true,    loaded: true}

调用const b = require('./b');这段代码时,因为b已经缓存了,所以不会冲走b模块的代码,所以最后打印的结果是:{ aWasLoaded: false, loaded: true }

用比较专业的话来说,就是循环依赖会导致模块加载时的缺失现象

更相信的内容,可以看这篇文章

转载地址:http://ecrha.baihongyu.com/

你可能感兴趣的文章
Python——SSHClient.py
查看>>
MVC解决更新冲突问题
查看>>
江西理工大学南昌校区cool code竞赛
查看>>
[LeetCode] Trim a Binary Search Tree 修剪一棵二叉搜索树
查看>>
Ubuntu SDL lib 安装
查看>>
Java 并发编程内部分享PPT分享
查看>>
关于discuz中禾金投票系统循环出现引导页的问题
查看>>
C#开源系统大汇总
查看>>
Linux服务器安全初始化自选安装Shell脚本
查看>>
PyCharm教程
查看>>
Python 简单的数据结构(一)
查看>>
谁说我们只会做工作流?做实验室管理系统我们也内行。
查看>>
yum安装开发库
查看>>
我的友情链接
查看>>
开源Python网络爬虫资料目录
查看>>
NSRunLoop Internals
查看>>
Hadoop2.4.1分布式安装
查看>>
PHP利用socket来实现POST数据
查看>>
Connection is read-only问题的产生原因与解决方法
查看>>
Proxmox VE 部署维护
查看>>