Nodejs的循环调用的问题
发布日期:2021-11-15 14:57:45
浏览次数:31
分类:技术文章
本文共 1527 字,大约阅读时间需要 5 分钟。
写代码的时候出现过下面的例子,两个文件中的函数互相调用,导致其中一个函数调用出现问题。
简化下来就是以下三个文件a.js、b.js、c.js。 a.jsconst b = require('./b');function a(num) { console.log(`a`); if(num != 1){ b.b(); }}module.exports = { a};
b.js
const a = require('./a');function b(num) { console.log(`b`); a.a(1);}module.exports = { b};
c.js
const a = require('./a');a.a(0);
当执行c文件的时候,就会在b文件中报以下错误:
abTypeError: a.a is not a function
原因是在a文件中加载b的时候,a还没有全部加载完,导致b文件中加载a的时候,b获取的是a未完全加载的内容,从而导致在b文件中执行a.a(1);时会报错,因为此时a文件中的a函数尚未加载。
可以添加点返回值,查看加载情况: a.jsconsole.log(1)this.n = 1;const b = require('./b');this.m = 1;this.n = 2;console.log(2)function a(num) { console.log(`a`); if(num != 1){ b.b(); }}module.exports = { a};
b.js
console.log(3)const a = require('./a');console.dir(a);console.log(4)function b(num) { console.log(`b`); a.a(1);}module.exports = { b};
c.js
const a = require('./a');a.a(0);
当执行c文件时:
13{ n: 1 }42ab/b.js:9 a.a(1); ^TypeError: a.a is not a function
可以发现在加载b文件的时候,a文件只加载了
a.jsconsole.log(1)this.n = 1;const b = require('./b');
,并没有全部加载,同时在b文件中加载a文件的时候,就自动获取了残缺的a,而不会去重新获取全部的a文件,这也防止其加载不会重复加载而导致进入死循环。
通过this方式有解决方法:
a.jsconst b = require('./b');function a(num) { console.log(`a`); if(num != 1){ b.b.apply(this);//<---- }}module.exports = { a};
b.js
function b(num) { console.log(`b`); this.a(1);//<----}module.exports = { b};
c.js
const a = require('./a');a.a(0);
直接将a通过this方式传递给b,在b中就可以直接通过this进行访问a中的函数了。
转载地址:https://blog.csdn.net/qq_39741836/article/details/109581742 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月24日 13时57分04秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
摩托罗拉v3java_拆一代超薄经典手机-摩托罗拉V3
2019-04-21
k近邻算法python解读_机器学习(K-近邻算法)Python的基础知识
2019-04-21
java timer并发_Java并发编程笔记之Timer源码分析
2019-04-21
java声明变量保存性别_java第二次课变量第一次上机
2019-04-21
js装修计算器java代码_JavaScript代码实现简单计算器
2019-04-21
功夫传人java_PAT L2-020 功夫传人【BFS】
2019-04-21
联机侠控制台JAVA_联机侠控制台常见问题 | 我的世界 | MC世界侠
2019-04-21
2018转行的java学习_2018java平均工资,想转行学java的快点上车
2019-04-21
java 常用数据库_java连接常用数据库
2019-04-21
有什么可以替换php,php替换函数是什么
2019-04-21
java静态方法是不是成员方法,Java静态变量与静态方法与成员变量成员方法的区别...
2019-04-21
oracle 结构讲解,Oracle 数据库体系结构解析
2019-04-21
merger oracle,merger oracle 函数
2019-04-21