Singleton 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-7个inMemoryDB被记录。即使在我把它改成这个之后,同样的交易:

const inMemoryDb = () => {
console.log('inMemoryDB');
return newDb();
}
inMemoryDb.public.none(fs.readFileSync('001-initial.sql', 'utf8'));
export default inMemoryDb();

例如,当我启动graphql服务时,当我运行yarn graphql-dev时,我会得到6-7个console.log

"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单例,如下所示(基于上面的第一个实现(:

const inMemoryPgDb = inMemoryDb;

同意您的看法,即发生调用并调用console.log,但变量的值不变。检查参考的示例

Singleton示例

好的,为什么有多个console.log?在上面的代码中,您给出了一个具有返回类型的函数实例,无论在哪里引用模块函数,它都会被调用。因为我们正在执行该功能。

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

最新更新