Успешный обратный вызов для метода emit в socket.io
Я пытаюсь исправить пользовательское сообщение от моего клиента. Мне нужно выполнить некоторые действия по его успеху и неудаче. Теперь, как я могу связать обратный вызов успеха с методом emit?
Для обратного вызова ошибки я использовал Exposed events doc и получил его работу
socket.on('error', () -> console.log("Error Occured"))
Для успеха я пробовал
socket.emit('my custom method', {content: json},() -> console.log("Emitted"))
Этот обратный вызов никогда не запускается независимо от того, был ли он успешным или неудачным.
Как я могу получить обработчик успеха?
Ответы
Ответ 1
Если вы посмотрите на документы, вы увидите пример передачи функции обратного вызова -2nd. Последний пример: http://socket.io/docs/#Sending-and-getting-data-acknowledgements
Ex сервер:
socket.on('formData',
function(data, fn){
// data is your form data from the client side
// we are here so we got it successfully so call client callback
// incidentally(not needed in this case) send back data value true
fn(true);
}
);
клиент:
socket.emit('formData',
data,
function(confirmation){
// send data
// know we got it once the server calls this callback
// note -in this ex we dont need to send back any data
// - could just have called fn() at server side
console.log(confirmation);
}
);
Ответ 2
Причина, по которой ваш второй код ничего не делает, состоит в том, что открытые события в socketIO просто определены для методов socket.on
. Поэтому вам нужно добавить еще один emit в ваш сервер app.js, чтобы выполнить этот
Клиент испускает настраиваемое сообщение и отправляет данные JSON в сокет через socket.emit, также он получает функцию обновления, которая обрабатывает обратный вызов успеха
socket.emit ('message', {hello: 'world'});
socket.on ('messageSuccess', function (data) {
//do stuff here
});
Серверная сторона Получает вызов из сообщения, испускаемого клиентом, и передает сообщениеSuccess обратно клиенту
socket.on ('message', function (data) {
io.sockets.emit ('messageSuccess', data);
});
Возможно, вы можете сделать модуль из этого поведения, поэтому вы можете прикрепить его для каждого сообщения, которое вы хотите обработать таким образом.