fix: resolve IDB nil-on-channel and CLJS deref bugs
- idb/get-meta and idb/get-doc were calling (put! ch nil) when no result found, which is illegal in core.async. Now close the channel instead (reader gets nil from closed channel). - todomvc.cljs used @(!todos) which calls the atom as a function. Fixed to @@!todos (deref atom → deref SyncedAtom).
This commit is contained in:
@@ -100,14 +100,15 @@
|
|||||||
(set! (.-onsuccess req)
|
(set! (.-onsuccess req)
|
||||||
(fn [e]
|
(fn [e]
|
||||||
(let [result (.-result (.-target e))]
|
(let [result (.-result (.-target e))]
|
||||||
(put! ch (when result
|
(if result
|
||||||
{:id (.-id result)
|
(do (put! ch {:id (.-id result)
|
||||||
:value (decode (.-value result))
|
:value (decode (.-value result))
|
||||||
:version (.-version result)
|
:version (.-version result)
|
||||||
:updated (.-updated result)
|
:updated (.-updated result)
|
||||||
:deleted (.-deleted result)
|
:deleted (.-deleted result)
|
||||||
:synced (.-synced result)}))
|
:synced (.-synced result)})
|
||||||
(async/close! ch))))
|
(async/close! ch))
|
||||||
|
(async/close! ch)))))
|
||||||
(set! (.-onerror req)
|
(set! (.-onerror req)
|
||||||
(fn [e] (js/console.error "IDB get error:" e) (async/close! ch)))
|
(fn [e] (js/console.error "IDB get error:" e) (async/close! ch)))
|
||||||
ch))
|
ch))
|
||||||
@@ -196,8 +197,10 @@
|
|||||||
(set! (.-onsuccess req)
|
(set! (.-onsuccess req)
|
||||||
(fn [e]
|
(fn [e]
|
||||||
(let [result (.-result (.-target e))]
|
(let [result (.-result (.-target e))]
|
||||||
(put! ch (when result (.-value result)))
|
(if result
|
||||||
(async/close! ch))))
|
(do (put! ch (.-value result))
|
||||||
|
(async/close! ch))
|
||||||
|
(async/close! ch)))))
|
||||||
(set! (.-onerror req) (fn [_] (async/close! ch)))
|
(set! (.-onerror req) (fn [_] (async/close! ch)))
|
||||||
ch))
|
ch))
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
(defn- todos-list
|
(defn- todos-list
|
||||||
"Return todos as sorted vec of [id doc] pairs."
|
"Return todos as sorted vec of [id doc] pairs."
|
||||||
[]
|
[]
|
||||||
(->> @(!todos)
|
(->> @@!todos
|
||||||
(sort-by (fn [[_ doc]] (:created doc)))
|
(sort-by (fn [[_ doc]] (:created doc)))
|
||||||
vec))
|
vec))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user