#javascript #reactjs #socket.io
#javascript #reactjs #socket.io
Вопрос:
Я следил за учебным пособием YouTube, в котором функция обратного вызова передается с помощью socket.emit, обратный вызов изменяет одно из состояний компонента
socket.emit('event', message, () => changeState())
на стороне сервера вызывается этот обратный вызов
socket.on('event', (message, callback) => {
// some code
callback()
})
как это работает?
Как можно изменить состояние, вызвав обратный вызов на стороне сервера?
Это неправильно или я не знаю о какой-то функциональности?
Комментарии:
1. Я использую его много, это очень удобно .. совет проверьте его функцию, иначе, если ее нет, это приведет к сбою сервера:
if (typeof callback === 'function') callback()
Ответ №1:
socket.emit(eventName[, …args][, ack])
Вы не передаете обратный вызов ( ack
) на сервер, это обратный вызов, который вызывается с ответом сервера. Смотрите связанные документы (клиент):
Аргумент ack является необязательным и будет вызван с ответом сервера.
И на сервере:
Аргумент ack является необязательным и будет вызван с ответом клиента.
Итак, в основном в вашем примере он просто не использует аргумент ответа сервера, другими словами: «установить состояние для ответа сервера».
// Client
socket.emit('event', message, (serverResponse) => change())
// Server, callback is **NOT** the callback above.
socket.emit('event', message, (clientResponse) => callback())
Комментарии:
1. таким образом, функция с сервера отправляется как сообщение подтверждения, и выполняется обратный вызов на стороне клиента (поскольку клиент отправил событие, как в qns)??
2. таким образом, сообщение ack фактически отправляется с сервера, который при получении клиентом выполняет его обратный вызов.