2016-07-11 3 views
1

Я использую выполнения Вызов JavaScript для выполнения действия на сервере, например:Rails Actioncable успех обратного вызова

subscription.perform('action', {...}); 

Однако, от того, что я видел там, кажется, нет встроенной Javascript «Успех» обратного вызова , то есть сообщить мне, что действие завершено со стороны сервера (или, возможно, не выполнено). Я думал об отправке в эфир в конце действия так:

def action(data) 
    ...do_stuff 
    ActionCable.server.broadcast "room", success_message... 
end 

Но все клиенты подписались на эту «комнату» получит это сообщение, возможно, в результате ложных срабатываний. Кроме того, из того, что я слышал, порядок сообщений не гарантируется, поэтому предыдущая трансляция внутри этого действия может быть доставлена ​​после сообщения об успешном завершении, что может привести к дальнейшим проблемам.

Любые идеи об этом или я что-то не хватает?

ответ

2

Глядя на https://github.com/xtian/action-cable-js/blob/master/dist/cable.js и https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#send(), perform просто выполняет WebSocket.send() и возвращает истину или ложь, и нет никакого способа узнать, поступила ли ваши данные. (Это просто невозможно с помощью WebSockets.)

Вы можете попробовать использовать только http-вызов (я рекомендую настроить api с jbuilder) или действительно передавать сообщение об успешном завершении.

Вы можете решить порядок сообщений, создав временную метку на сервере и отправив ее вместе с сообщением, а затем отсортировав сообщения с помощью Javascript.

Удачи вам!

Смежные вопросы