javascript - 当函数导出到不同的 JS 文件时,函数打印两次的结果
问题描述
我有一个函数可以计算文件中的行数并打印出结果,它工作正常。我还有一个单独的 js 文件,我将其导入到我的第一个 js 文件中,该文件具有粗略的添加功能,也可以正常工作。
我遇到的第一个问题是当我运行我的第一个 js 文件时,它会打印count
两次。当我将第一个 js 文件导入到第二个 js 文件时,就会发生这种情况。当我在第二个 js 文件上注释掉 require 时,该lineCount()
函数正确运行并且count
只按预期打印一次。
当我需要将 js 文件放在一个单独的文件中时,为什么结果会count
打印两次,我该如何修复它以在 require 语句仍然存在时只打印一次结果?
我的第二个问题是,当我运行我的第一个 js 文件时,TypeError: add is not a function
即使我从第二个 js 文件中导出 add 并正确调用它,我也会得到fun1.add()
。为什么该功能没有运行,我该如何解决?
const fun1 = require(PATH to second js file);
const fs = require('fs')
function lineCount() {
return new Promise((resolve, reject) => {
let count = 0;
fs.createReadStream('./classifiedYtData.txt')
.on("data", (buffer) => {
let idx = -1;
count--;
do {
idx = buffer.indexOf(10, idx + 1);
count++;
} while (idx !== -1);
}).on("end", () => {
resolve(count);
console.log(count)
}).on("error", reject);
});
}
lineCount()
fun1.add()
module.exports = {
lineCount,
}
const fun2 = require(PATH to first js file);
function add() {
const a = 3;
const b = 5;
console.log(a+b);
}
module.exports = {
add,
}
解决方案
为什么当我需要将 js 文件放在单独的文件中时,结果计数会打印两次,我该如何修复它以在 require 语句仍然存在时只打印一次结果?
关于印刷:第一个来自lineCount
,第二个来自fun1.add()
在 JavaScript 中要求模块将运行其中的代码。
当您运行第一个文件时:
第二个文件是需要的。所以它进入文件并开始运行它。当它开始时 - 第一个文件需要并且它开始再次运行它,依此类推。它叫cycle dependencies
。你应该避免它。所以,只需const fun2 = require(PATH to first js file);
从第二个文件中删除,因为我看不到它的任何用法。
仅供参考:如果您调用第一个文件,则没有错误。但是在调用第二个文件时出现了您提到的错误,原因是循环依赖。
推荐阅读
- vb.net - 这段代码是否因为需要很长时间或损坏而无法工作?
- function - 如何在 Ubuntu 16.4.4 上为 Cloud Functions 安装旧版本 Firebase SDK
- php - Magento 2 从根文件访问 Rest API 接口
- postgresql - Postgresql 在动态值上创建函数索引
- javascript - 没有得到 XMLHTTPRequest 的响应
- ruby - 使用 Rspec 共享示例测试 Ruby 类的属性
- scala - String Scala 中的模式匹配
- salesforce - 使用 apex 代码如何在 Sobject 上创建 Listview,具有标准和自定义字段
- html - 传单绘制 - toGeoJSON
- oracle - RDS vs EC2 短时间,测试oracle db?