- Watch the build
shadow-cljs watch server
- Run the code
node out/kanalid.js
Created
July 3, 2021 04:25
-
-
Save madis/aebedff490b2c987f696237d6fda6c0b to your computer and use it in GitHub Desktop.
Converting callbacks to async channels
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns kanalid.core | |
; (:require-macros [cljs.core.async.macros :refer [go go-loop]]) | |
(:require [cljs.core.async :refer [go <! put!] :as async] | |
["events" :as EventEmitter])) | |
(def global-emitter (new EventEmitter)) | |
(defn emit [event data] | |
(.emit global-emitter event data)) | |
(defn subscribe | |
"Returns JavaScript EventEmitter that emits strings" | |
[emitter event-name callback] | |
(.addListener emitter event-name callback) | |
emitter) | |
(defn subscribe->channel [emitter event-name] | |
(let [channel (async/chan)] | |
(subscribe emitter event-name #(put! channel %)) | |
channel)) | |
(defn example [] | |
(let [channel (async/chan) | |
emitter (new EventEmitter) | |
event-name :happening] | |
(.addListener emitter event-name #(put! channel %)) | |
(.emit emitter event-name 42) | |
(.emit emitter event-name "Wadiis") | |
(async/go-loop [] | |
(let [val-from-channel (<! channel)] | |
(println "Got value from ze channel: " val-from-channel) | |
(recur))) | |
(println "Done in let")) | |
(println "Done in example")) | |
(defn example-two [] | |
(let [jobs-channel (subscribe->channel global-emitter :create-job)] | |
(go | |
(emit :create-job 42) | |
(println "Got a new value: " (<! jobs-channel)) | |
))) | |
(defn main [] | |
(println "Hello world!") | |
(example) | |
(example-two)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; shadow-cljs configuration | |
{:source-paths | |
["src/dev" | |
"src/main" | |
"src/test"] | |
:dependencies | |
[] | |
:builds | |
{:server {:target :node-script | |
:main kanalid.core/main | |
:output-to "out/kanalid.js"}}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment