当figwheel重新加载时,Websocket回调不会更新

时间:2016-04-09 09:09:57

标签: 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! (.-onmessage ws) on-message)
    ws))

我正在使用figwheel。我注意到当我更改回调(on-messageon-error等)时,应用程序会重新加载,但这些函数的旧版本仍会被调用。

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

据我所知,这是因为websocket仍然引用了旧版本的函数。

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

1 个答案:

答案 0 :(得分:3)

也许您的代码不是可重新加载。另一个需要快速解决的问题是,当您从编辑器/ IDE中保存时,总是重新加载命名空间:

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

请注意^:figwheel-always元数据。

有关编写 reloadable 代码的更多信息,请参阅here