Rails Actioncable成功回调

时间:2016-07-11 16:55:21

标签: callback ruby-on-rails-5 actioncable

我使用执行javascript调用在服务器上执行操作,如下所示:

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

但是,从我所看到的情况来看,似乎没有内置的javascript"成功"回调,即让我知道该行动是在服务器方面结束的(或可能是失败的)。我正考虑在行动结束时发送广播,如下:

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

但是所有客户都订阅了这个"房间"会收到该消息,可能导致误报。此外,根据我所听到的情况,消息顺序无法保证,因此此操作中的先前广播可以在成功消息之后传递,可能会导致进一步的问题。

有关于此的任何想法,还是我完全错过了什么?

2 个答案:

答案 0 :(得分:2)

查看https://github.com/xtian/action-cable-js/blob/master/dist/cable.jshttps://developer.mozilla.org/en-US/docs/Web/API/WebSocket#send()perform只执行WebSocket.send()并返回true或false,并且无法知道您的数据是否已到达。 (这似乎是WebSockets无法实现的。)

您可以尝试仅使用http呼叫(我建议使用jbuilder设置api),或者确实广播回成功消息。

您可以通过在服务器上创建时间戳并将其与消息一起发送,然后使用Javascript对消息进行排序来解决消息的顺序。

祝你好运!

答案 1 :(得分:0)

也许您正在寻找的是 trasmit 方法:https://api.rubyonrails.org/v6.1.3/classes/ActionCable/Channel/Base.html#method-i-transmit

它向正在为通道处理的当前连接发送一条消息。