javascript - 单例 ES6 模块被多次调用?
问题描述
我不确定为什么这里有一个 console.log 的模块被多次调用。我以为这是一个单例。
因此,如果我将此模块导入其他模块,因为这是一个单例,我没想到每次都会调用 console.log ......只是第一次被模块导入但之后我认为,即使当由后续模块导入时,因为它是一个单例,所以我不应该看到很多这些被记录:
src/graphql/db/InMemory/ InMemoryDB.ts
console.log('inMemoryDB');
const inMemoryDb = newDb();
inMemoryDb.public.none(fs.readFileSync('001-initial.sql', 'utf8'));
export default inMemoryDb;
当我最初运行测试或最初启动使用此单例的服务时,我看到的是 6-7inMemoryDB
被记录。即使我把它改成这个,同样的交易:
const inMemoryDb = () => {
console.log('inMemoryDB');
return newDb();
}
inMemoryDb.public.none(fs.readFileSync('001-initial.sql', 'utf8'));
export default inMemoryDb();
因此,例如,当我启动我的 graphql 服务时,我会在运行时得到 6-7 个 console.logsyarn graphql-dev
"graphql-dev": "yarn compile-graphql && yarn start-graphql-dev",
"compile-graphql": "tsc -b ./src/graphql",
"start-graphql-dev": "node --optimize_for_size --trace-warnings --es-module-specifier-resolution=node --no-warnings dist/graphql/server.js"
在我的graphql代码的深处,它使用这样的内存数据库单例(基于上面的第一个实现):
const inMemoryPgDb = inMemoryDb;
解决方案
同意你的调用,console.log 被调用,但变量的值没有改变。检查示例以供参考
好的,为什么会有多个 console.log ?在上面的代码中,您提供了一个具有返回类型的函数实例,并且无论模块函数被引用到哪里,它都会被调用。因为我们正在执行该功能。
每个模块都是独立的 JavaScript 程序。它在执行时组合成一个程序。
推荐阅读
- javascript - 动态标签大小写不正确
- javascript - FullCalendar defaultTimedEventDuration 不起作用
- python-3.x - 如何在 Ipythonnoteook 中使用 argparse 传递图像路径
- python - 更新动画变量
- can-bus - CANopen 帧长什么样, 2. Transmit PDO 和 Receive PDO 是什么意思?, 3. PDO 映射如何以编程方式完成?
- node.js - Azure Functions 是否在冷启动时运行 NPM 安装?
- python - pandas groupby 按自定义年份,例如学年
- javascript - 为什么默认开关不断重复自己?
- javascript - 在 NodeJS 上运行 Frozen TensorFlow 模型
- javascript - 将 PWA 支持添加到 JSF Web 应用程序