From 1d54fe2e248b9f489b6c6ab4aa6697ae770da266 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 25 Sep 2025 09:55:34 +0200 Subject: [PATCH] :sparkles: Add support for emit messages without waiting response on worker --- frontend/src/app/main/worker.cljs | 11 ++++++++++- frontend/src/app/util/worker.cljs | 25 +++++++++++++++++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/main/worker.cljs b/frontend/src/app/main/worker.cljs index a310f566e8..aae9000556 100644 --- a/frontend/src/app/main/worker.cljs +++ b/frontend/src/app/main/worker.cljs @@ -21,7 +21,6 @@ :config {:public-uri cf/public-uri :build-data cf/build-date :version cf/version}}) - (set! instance worker))) (defn ask! @@ -34,6 +33,16 @@ (uw/ask! instance message transfer) (rx/empty)))) +(defn emit! + ([message] + (if instance + (uw/emit! instance message) + (rx/empty))) + ([message transfer] + (if instance + (uw/emit! instance message transfer) + (rx/empty)))) + (defn ask-buffered! ([message] (if instance diff --git a/frontend/src/app/util/worker.cljs b/frontend/src/app/util/worker.cljs index f1b27cc7c6..bf1b44c30b 100644 --- a/frontend/src/app/util/worker.cljs +++ b/frontend/src/app/util/worker.cljs @@ -19,7 +19,7 @@ ([worker message] (send-message! worker message nil)) - ([worker {sender-id :sender-id :as message} {:keys [many?] :or {many? false}}] + ([worker {sender-id :sender-id :as message} {:keys [many? ignore-response?] :or {many? false ignore-response? false}}] (let [take-messages (fn [ob] (if many? @@ -34,11 +34,13 @@ (if (some? instance) (do (.postMessage instance data transfer) - (->> (:stream worker) - (rx/filter #(= (:reply-to %) sender-id)) - (take-messages) - (rx/filter (complement :dropped)) - (rx/map handle-response))) + (if (not ignore-response?) + (->> (:stream worker) + (rx/filter #(= (:reply-to %) sender-id)) + (take-messages) + (rx/filter (complement :dropped)) + (rx/map handle-response)) + (rx/empty))) (rx/empty))))) (defn ask! @@ -51,6 +53,17 @@ :payload message :transfer transfer}))) +(defn emit! + ([worker message] + (emit! worker message nil)) + ([worker message transfer] + (send-message! + worker + {:sender-id (uuid/next) + :payload message + :transfer transfer} + {:ignore-response? true}))) + (defn ask-many! ([worker message] (ask-many! worker message nil))