figwheel重新加载时Websocket回调未更新

figwheel重新加载时Websocket回调未更新,websocket,clojurescript,figwheel,Websocket,Clojurescript,Figwheel,我的代码如下所示: (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! (

我的代码如下所示:

(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))
我正在使用。我注意到,当我更改回调时(
在message
在error
等),应用程序确实会重新加载,但这些函数的旧版本仍然会被调用

(defn on-message [event]
  ; Changed. Requires hard reload to be called on websocket message.
  (do-other-stuff))
我理解这是因为websocket仍然引用该函数的旧版本

是否有一种模式可以使此代码可重新加载?也许我应该使用
core/async
?如果是这样,那会是什么样子?

也许您的代码不可重新加载。要快速修复问题,另一件需要注意的事情是在从编辑器/IDE保存时始终重新加载名称空间:

(ns ^:figwheel-always my.namespace
  (:require [clojure.string :as str])
请注意
^:figwheel始终
元数据

有关编写可重新加载代码的更多信息,请参阅

我认为你是对的,非“可重新加载”代码正是问题所在。谢谢你的链接和术语,我已经更新了这个问题,并将研究可重新加载的代码。