1

我的代码如下所示:

(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?如果是这样,那会是什么样子?

4

1 回答 1

3

也许您的代码不可重新加载。为了快速修复,要查看的另一件事是在从编辑器/IDE 保存时始终重新加载命名空间:

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

注意^:figwheel-always元数据。

有关编写可重载代码的更多信息,请参见此处

于 2016-04-09T09:46:46.270 回答