gpt4 book ai didi

javascript - 函数中的服务器变量

转载 作者:行者123 更新时间:2023-12-03 05:39:54 24 4
gpt4 key购买 nike

我有一个通过 socket.io 事件调用的函数。该功能在另一个模块中。我想确保每次调用该函数时,模块中的变量都不会因之前的函数调用而更改。

我知道如何用其他语言执行此操作:创建一个对象的新实例,调用该函数,但我似乎无法让它在 JavaScript 中工作。

代码如下所示:

调用函数的socket.io模块

// -- all events -- //
io.on('connection', function (socket) {
console.log('user connected');

socket.on('increase', function (data) {
var increaser = require('./increase.js');
increaser.increase();
});
});

增加模块,应该每次都打印1,但是打印1..2..3..4....

/*jslint node: true */
"use strict";

// -- variables -- //
var counter = 0;

module.exports = {
increase : function () {
counter += 1;
console.log(counter);
}
};

我想知道如何做到这一点,因为在我的服务器上,一个函数被调用,它调用了一些异步函数,并且我想确保所有变量保持原样,直到整个函数处理完成并且不会改变如果另一个客户端连接并触发相同的事件。

最佳答案

您可以像其他语言一样使用 object 实例执行相同的操作,如下所示。

方法1:最简单的函数对象

/*jslint node: true */
"use strict";


module.exports = function() {
this.counter = 0;
this.increase = function () {
this.counter += 1;
console.log(this.counter);
};
};

方法2:带有原型(prototype)的函数

/*jslint node: true */
"use strict";

function Increaser() {

}

Increaser.prototype = {
counter: 0,
increase: function () {
this.counter += 1;
console.log(this.counter);
};
};

module.exports = Increaser;

在您的socket.io

// -- all events -- //
io.on('connection', function (socket) {
console.log('user connected');

socket.on('increase', function (data) {
var Increaser = require('./increase.js');
var increaser = new Increaser();
// Also you can use as below in one line
// var increaser = new require('./increase.js')();
increaser.increase();
});
});

关于javascript - 函数中的服务器变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40579320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com