2016-07-11 20 views
1

ich die JavaScript-Aufruf eine Aktion auf dem Server auszuführen, wie folgt aus:Rails Actioncable Erfolg Rückruf

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

jedoch von dem, was ich dort gesehen habe, scheint kein builtin javascript „Erfolg“ Rückruf zu sein , dh mir mitteilen, dass die Aktion auf der Serverseite abgeschlossen ist (oder möglicherweise fehlgeschlagen ist). Ich dachte an, wie so eine Sendung am Ende der Aktion zu senden:

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

Aber alle diese „Zimmer“ abonniert Kunden würden diese Nachricht erhalten, möglicherweise in Fehlalarme zur Folge hat. Darüber hinaus ist die Nachrichtenreihenfolge nach meinen Angaben nicht garantiert, sodass eine vorherige Übertragung innerhalb dieser Aktion nach der Erfolgsmeldung erfolgen könnte, was möglicherweise zu weiteren Problemen führen könnte.

Irgendwelche Ideen zu diesem oder bin ich etwas völlig fehlt?

Antwort

2

Mit Blick auf https://github.com/xtian/action-cable-js/blob/master/dist/cable.js und https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#send(), perform führt nur WebSocket.send() und gibt wahr oder falsch, und es gibt keine Möglichkeit zu wissen, ob Ihre Daten angekommen sind. (Das ist mit WebSockets einfach nicht möglich.)

Sie könnten versuchen, nur einen http-Aufruf (ich empfehle die Einrichtung einer API mit Jbuilder), oder tatsächlich eine Erfolgsmeldung zurücksenden.

Sie können die Reihenfolge der Nachrichten lösen, indem Sie einen Zeitstempel auf dem Server erstellen und ihn zusammen mit der Nachricht senden und dann die Nachrichten mit Javascript sortieren.

Viel Glück!