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 に答える