当 figwheel 重新加载时,Websocket 回调不更新
Websocket callback not updating when figwheel reloads
我的代码如下所示:
(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))
我正在使用 figwheel
。我注意到,当我更改回调(on-message
、on-error
等)时,应用会重新加载,但这些函数的旧版本仍会被调用。
(defn on-message [event]
; Changed. Requires hard reload to be called on websocket message.
(do-other-stuff))
我理解这是因为旧版本的函数仍然被websocket引用
是否有一种模式可以使此代码重新加载?也许我应该使用 core/async
?如果是这样,那会是什么样子?
也许您的代码不可重载。要快速修复的另一件事是,当您从 editor/IDE:
保存时始终重新加载名称空间
(ns ^:figwheel-always my.namespace
(:require [clojure.string :as str])
注意 ^:figwheel-always
元数据。
有关编写 可重新加载 代码的更多信息,请参阅 here。
我的代码如下所示:
(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))
我正在使用 figwheel
。我注意到,当我更改回调(on-message
、on-error
等)时,应用会重新加载,但这些函数的旧版本仍会被调用。
(defn on-message [event]
; Changed. Requires hard reload to be called on websocket message.
(do-other-stuff))
我理解这是因为旧版本的函数仍然被websocket引用
是否有一种模式可以使此代码重新加载?也许我应该使用 core/async
?如果是这样,那会是什么样子?
也许您的代码不可重载。要快速修复的另一件事是,当您从 editor/IDE:
保存时始终重新加载名称空间(ns ^:figwheel-always my.namespace
(:require [clojure.string :as str])
注意 ^:figwheel-always
元数据。
有关编写 可重新加载 代码的更多信息,请参阅 here。