gpt4 book ai didi

mysql - Sequelize updateAttributes 在 socket.on( 'disconnet' ) 中不起作用

转载 作者:行者123 更新时间:2023-11-29 00:14:32 26 4
gpt4 key购买 nike

我想在客户端与套接字断开连接时更新时间。但是,下面的代码从“find({where: {room_id: roomId}})”行给我“没有方法‘indexOf’”。有人知道为什么吗?谢谢!

var roomId;
roomId = socket.on('updateStartTime', function(roomId) {
//some code
return roomId
});

socket.on('disconnect', function() {
var date = new Date();

Room.find({
where: {
room_id: roomId
}
}).complete(function(err, room) {
if (err) console.log(err);

room.updateAttributes({
end_time: date
}).success(function(room) {
console.log("end_time: " + room.end_time);
});
});

socket.broadcast.emit('updateChat', 'SERVER', socket.username + ' has disconnected...');
});

同时,它在客户端从 socket.emit 触发事件时起作用。

     roomId = socket.on('updateStartTime', function(roomId) {
var date = new Date();
Room.find({
where: {
room_id: roomId
}
}).complete(function(err, room) {
if (err) console.log(err);
room.updateAttributes({
start_time: date
}).success(function(st) {})
return roomId;
});
});

最佳答案

基本上,事件驱动模型是当某些事件发生时您会遇到某个闭包(如果您不知道什么是闭包或它是如何工作的,请查看 this thread )。所以你的代码:

roomId = socket.on('updateStartTime', function (roomId) {
// this is where the closure starts
return roomId;
// closure ends here
}

您似乎正试图从闭包外获取 roomId。但这是行不通的。您的代码中的错误是:
尽管您希望将其分配给全局 roomId,但“return roomId”无处可去。想一想,在事件驱动模型中,你永远不知道这个函数(roomId)什么时候会被执行。因此,当您将 socket.on 结果分配给全局 roomId 时,如果尚未执行,它如何给您 roomId 呢?而且它不会阻塞在那里等待结果,因为 nodejs 的非阻塞模型。实际上,如果您查看 socket.on 的文档,它会立即返回自己,这是一个“套接字”。这就是您收到错误的原因。

你的代码的第二部分是有效的,因为它在闭包中。 roomId 指的是本地 roomId,它是一个期望值。这段代码仍然没有给你想要的,因为当有人断开连接时它不会执行。您可以尝试以下方法:

socket.on('updateStartTime', function (roomId) {
socket.on('disconnect', function() {
// your 'Room' operation here.
socket.broadcast.emit('updateChat', 'SERVER', socket.username + ' has disconnected...');
});
});

请记住,在事件驱动模型中,它不是按顺序执行的。任何事情都可能随时发生。您需要在正确的地方做正确的事。

关于mysql - Sequelize updateAttributes 在 socket.on( 'disconnet' ) 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464951/

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