These are chat archives for NodejsRUS/chat

2nd
Sep 2015
Chimit
@chimit
Sep 02 2015 08:42

Друзья, подскажите, что не так. Кручу нечто вроде чата на socket.io. На сервере принимаю событие от клиента и рассылаю в группу:

socket.on('location', function(data) {
        var location_data = [];
        location_data['user_id'] = socket.user_id;
        location_data['point']   = data.point;

        console.log(location_data);

        // Send location to the other connected users
        io.to('group_' + data.group_id).emit('location', location_data);
});

В консоли объект отображается.

Но на клиенте объект location_data приходит пустой:

socket.on('location', function(data) {
            console.log(data);
});
hellboy81
@hellboy81
Sep 02 2015 10:49

А если функция в параллели не может соединится с бд 100 часов, а кэлбэк без этого не вызовится ?

значит твой finalCallback никогда не вызовется
такого рода задачу можно решить по другому

@2byte @AlexeyKhristov

на такой случай ИМХО нужно вызывать callback не дожидаясь ответа от базы данных. Если произошел таймаут/ошибка в базе - его ты просто протоколлируешь в консоле/логе/...

Я раньше тоже допускал такую ошибку - callback после update или delete
callback - с результатом нужно отсылать клиенту как можно раньше (как только появиться нужны клиенту результат)
Вплоть до просто статуса Accepted
что типа данные приняты, мы сейчас их обрабатываем
Ruslan Nekhoroshkin
@nrvru
Sep 02 2015 10:56
@Chimit location_data объявляется как пустой массив, а затем работаете как с объектом - не лучшее решение для оптимизации интерпретатором + возможно socket.io не понимает что вы передаете именно массив со свойствами. Попробуйте присвоить location_data пустой объект и работать с ним как с нормальным объектом. var location_data = {};