首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例ES6模块被多次调用?

单例ES6模块被多次调用?
EN

Stack Overflow用户
提问于 2020-12-20 06:25:48
回答 1查看 380关注 0票数 1

我不知道为什么这里有一个console.log的模块被多次调用。我以为这是单件

因此,如果我将这个模块导入到其他模块中,因为这是一个单例,所以我没想到console.log在第一次被模块导入时会调用每个time...only,但在此之后,我认为即使是由后续模块导入,因为它是单个模块,我也不会看到大量这样的日志记录:

src/graphql/db/InMemory/InMemoryDB.ts

代码语言:javascript
复制
console.log('inMemoryDB');
const inMemoryDb = newDb();
inMemoryDb.public.none(fs.readFileSync('001-initial.sql', 'utf8'));
export default inMemoryDb;

当我运行最初运行的测试时,我看到的是最初使用这个单例启动服务时看到的是6-7 inMemoryDB正在被记录。即使在我把它改成这个之后,同样的交易:

代码语言:javascript
复制
const inMemoryDb = () => {
  console.log('inMemoryDB');
  return newDb();
}
inMemoryDb.public.none(fs.readFileSync('001-initial.sql', 'utf8'));
export default inMemoryDb();

因此,例如,当我启动graphql服务时,当我运行console.logs时,我得到了6-7个这样的yarn graphql-dev

代码语言:javascript
复制
"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代码中,它使用这样的内存中的DB单例(基于上面的第一个实现):

代码语言:javascript
复制
const inMemoryPgDb = inMemoryDb;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-20 07:28:16

同意您的观点,即调用会发生,而console.log被调用,但是变量的值不会改变。请查看此示例以供参考

单例

好的,为什么会有多个console.log?在上面的代码中,您将给出一个具有返回类型的函数实例,在任何引用模块函数的地方,它都会被调用。因为我们正在执行这个函数。

每个模块都是独立的JavaScript程序。它在执行时合并成一个程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65377457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档