当 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-messageon-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