我是node.js的新手并且正在学习......
我有以下2个socket.io监听器,我需要确保.on在.once之前发生(当前首先出现.once):
io.on('connection', function (socket) {
io.once('connection', function (socket) {
是否有一种很好的方法可以确保始终发生.once?
答案 0 :(得分:3)
这可能不起作用,因为您正在创建两个独立的功能。通常,对于事件监听器来说,这很好。在这种情况下,你需要它们。
您可以做的是使用on
订阅并让处理程序弄清楚它是否已经运行过。
io.on('connection', function (socket) {
if (!this.called) {
// do what you want to do only the first time
this.called = true;
}
// do whatever you want to do every time
}.bind({ called: false });
这会创建一个包装函数,该函数会跟踪它是否已被调用,并在第一次调用时执行一些特殊操作。
答案 1 :(得分:2)
因此,当您拥有这些订单依赖项时,最好明确地为它们编码。当操作真正独立时,事件是很好的,但是当操作具有相互依赖性时,最好在代码中使其显而易见。通常,不要假设事件源将调用绑定事件处理函数的顺序。因此,尝试类似这样的伪代码:
io.on('connection', firstConnection);
function firstConnection(socket) {
//do first connectiony stuff here
io.on('connection', allConnections);
io.off('connection', firstConnection);
allConnections(socket);
}
function allConnections(socket){ /*all connectiony stuff here */}