首页 > 解决方案 > 当函数导出到不同的 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,
}

标签: javascript

解决方案


为什么当我需要将 js 文件放在单独的文件中时,结果计数会打印两次,我该如何修复它以在 require 语句仍然存在时只打印一次结果?

关于印刷:第一个来自lineCount ,第二个来自fun1.add()

在 JavaScript 中要求模块将运行其中的代码。
当您运行第一个文件时:

第二个文件是需要的。所以它进入文件并开始运行它。当它开始时 - 第一个文件需要并且它开始再次运行它,依此类推。它叫cycle dependencies。你应该避免它。所以,只需const fun2 = require(PATH to first js file);从第二个文件中删除,因为我看不到它的任何用法。

仅供参考:如果您调用第一个文件,则没有错误。但是在调用第二个文件时出现了您提到的错误,原因是循环依赖。


推荐阅读