我的代码如下所示:
(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
?如果是这样,那会是什么样的?
答案 0 :(得分:3)
也许您的代码不是可重新加载。另一个需要快速解决的问题是,当您从编辑器/ IDE中保存时,总是重新加载命名空间:
(ns ^:figwheel-always my.namespace
(:require [clojure.string :as str])
请注意^:figwheel-always
元数据。
有关编写 reloadable 代码的更多信息,请参阅here。