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:
Florian Schroedl
2026-04-04 16:53:54 +02:00
parent d5a0082b67
commit 6f70fbfdbb
2 changed files with 14 additions and 11 deletions

View File

@@ -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))

View File

@@ -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))