Nodejs:跨多个文件的全局变量

use*_*529 3 javascript singleton node.js

我已经为我的节点服务器编写了跨多个文件的代码。

如果我有一个文件,请说basket.js:

var Basket = {
    fruits : 0,
    
    addFruit : function() {
        fruits++;
    },

    removeFruit : function() {
        fruits--;
    },

    printFruit : function() {
        console.log(this.fruits);
    }
}
module.export = Basket;
Run Code Online (Sandbox Code Playgroud)

我还有另一个名为 give.js 的文件:

var Basket1 = require("./basket.js");

Basket1.addFruit();
Basket1.printFruit();
Run Code Online (Sandbox Code Playgroud)

另一个名为 take.js 的文件:

var Basket2 = require("./basket.js");

Basket2.removeFruit();
Basket2.printFruit();
Run Code Online (Sandbox Code Playgroud)

两个文件会写入同一个篮子实例吗?换句话说,他们会控制财产,水果吗?节点是否自行管理竞争条件?即如果两个修改水果的命令同时从 add 和 sub 进来,node 知道如何处理吗?

如果我想使两个文件可以同时查看一个单例并访问它,这是要走的路吗?或者其他人如何做到这一点?

And*_*ren 5

是的,他们将访问同一个对象。

模块在第一次加载后被缓存。这意味着(除其他外)每次调用 require('foo') 都会返回完全相同的对象,如果它解析为相同的文件。

模块文档

不,节点不会自行管理竞争条件,因为竞争条件不会由节点本身引起。Node 是单线程的,因此任何代码都不能与其他代码同时执行。例如,请参阅此答案以获取更多解释。