refactor: replace core.async with promesa for all async operations
- Store protocol now returns promesa promises instead of core.async channels - MemoryStore: `(p/resolved val)` replaces chan+put!+close! ceremony - IDBStore: `p/create` with resolve/reject wraps IDB callbacks - sync.cljc: CLJ uses `p/vthread`, CLJS returns native Promise chains - core.cljc: `p/let` replaces go blocks, timer-based sync loop replaces go-loop+alts!, debounced push replaces kick channel - Tests use `deref` with timeout on promesa promises - Todomvc example uses `p/let` instead of go/<!
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
(:require [pocketbook.core :as pb]
|
||||
[pocketbook.store.idb :as idb]
|
||||
[pocketbook.hiccup :refer [html]]
|
||||
[cljs.core.async :refer [go <!]]
|
||||
[promesa.core :as p]
|
||||
[clojure.string :as str]))
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
@@ -232,9 +232,8 @@
|
||||
;; ---------------------------------------------------------------------------
|
||||
|
||||
(defn ^:export init []
|
||||
(go
|
||||
(let [store (<! (idb/open "pocketbook-todomvc"))
|
||||
todos (pb/synced-atom store "todo"
|
||||
(p/let [store (idb/open "pocketbook-todomvc")]
|
||||
(let [todos (pb/synced-atom store "todo"
|
||||
{:server "http://localhost:8090/sync"
|
||||
:interval 15000})]
|
||||
(reset! !conn store)
|
||||
@@ -248,7 +247,7 @@
|
||||
(.addEventListener js/window "online" (fn [_] (render!)))
|
||||
(.addEventListener js/window "offline" (fn [_] (render!)))
|
||||
;; Wait for IDB — watch triggers render automatically
|
||||
(<! (pb/ready? todos))
|
||||
(js/console.log "🔶 Pocketbook TodoMVC loaded —" (count @todos) "todos"))))
|
||||
(p/let [_ (pb/ready? todos)]
|
||||
(js/console.log "🔶 Pocketbook TodoMVC loaded —" (count @todos) "todos")))))
|
||||
|
||||
(init)
|
||||
|
||||
Reference in New Issue
Block a user