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)
|
||||
(fn [e]
|
||||
(let [result (.-result (.-target e))]
|
||||
(put! ch (when result
|
||||
{:id (.-id result)
|
||||
:value (decode (.-value result))
|
||||
:version (.-version result)
|
||||
:updated (.-updated result)
|
||||
:deleted (.-deleted result)
|
||||
:synced (.-synced result)}))
|
||||
(async/close! ch))))
|
||||
(if result
|
||||
(do (put! ch {:id (.-id result)
|
||||
:value (decode (.-value result))
|
||||
:version (.-version result)
|
||||
:updated (.-updated result)
|
||||
:deleted (.-deleted result)
|
||||
:synced (.-synced result)})
|
||||
(async/close! ch))
|
||||
(async/close! ch)))))
|
||||
(set! (.-onerror req)
|
||||
(fn [e] (js/console.error "IDB get error:" e) (async/close! ch)))
|
||||
ch))
|
||||
@@ -196,8 +197,10 @@
|
||||
(set! (.-onsuccess req)
|
||||
(fn [e]
|
||||
(let [result (.-result (.-target e))]
|
||||
(put! ch (when result (.-value result)))
|
||||
(async/close! ch))))
|
||||
(if result
|
||||
(do (put! ch (.-value result))
|
||||
(async/close! ch))
|
||||
(async/close! ch)))))
|
||||
(set! (.-onerror req) (fn [_] (async/close! ch)))
|
||||
ch))
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
(defn- todos-list
|
||||
"Return todos as sorted vec of [id doc] pairs."
|
||||
[]
|
||||
(->> @(!todos)
|
||||
(->> @@!todos
|
||||
(sort-by (fn [[_ doc]] (:created doc)))
|
||||
vec))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user