2016-04-09 13 views
1

I-Code, der so etwas wie die unten aussieht:Websocket Rückruf nicht aktualisiert, wenn figwheel nachlädt

(defn on-message [event] 
    (do-stuff)) 

(defn build-websocket [] 
    (let [ws (js.window.WebSocket. "ws://localhost:8888/ws/")] 
    (set! (.-onopen ws) on-open) 
    (set! (.-onclose ws) on-close) 
    (set! (.-onerror ws) on-error) 
    (set! (.-onmessage ws) on-message) 
    ws)) 

Ich verwende figwheel. Ich habe bemerkt, dass wenn ich meine Callbacks (on-message, on-error, etc) ändere, die App neu lädt, aber alte Versionen dieser Funktionen immer noch aufgerufen werden.

(defn on-message [event] 
    ; Changed. Requires hard reload to be called on websocket message. 
    (do-other-stuff)) 

Ich verstehe, dass dies daran liegt, dass die alte Version der Funktion immer noch von der Websocket referenziert wird.

Gibt es ein Muster, das diesen Code nachladbar machen würde? Vielleicht sollte ich core/async verwenden? Wenn ja, wie würde das aussehen?

Antwort

3

Vielleicht ist Ihr Code nicht nachladbar. Eine andere Sache zu betrachten, für die schnelle Lösung, ist, immer den Namensraum neu zu laden, wenn Sie von Ihrem Editor/IDE speichern:

(ns ^:figwheel-always my.namespace 
    (:require [clojure.string :as str]) 

Hinweis die ^:figwheel-always Metadaten.

Weitere Informationen zum Schreiben nachladbar Code siehe here.

+0

Ich denke, Sie haben Recht, nicht "nachladbar" Code ist genau das Problem. Vielen Dank für den Link und die Terminologie, ich habe die Frage aktualisiert und werde nachladbaren Code recherchieren. – meshy