A promise library & concurrency toolkit for Clojure and ClojureScript.
This library exposes a bunch of useful syntactic abstractions that considerably simplify working with promises (in a very similar way as you will do it in JS with async/await) and many helpers from executors to concurrency patterns (bulkhead & CSP). With 0 runtime external dependencies.
Here you can look a detailed documentation.
Getting Started
deps.edn:
funcool/promesa {:mvn/version "12.0.1"}You also can get it via git:
funcool/promesa
{:git/sha "7d841fc"
:git/tag "12.0.1"
:git/url "https://github.com/funcool/promesa"}On the REPL
(require '[promesa.core :as p]) (->> (p/promise 1) (p/map inc) (deref) ;; => 2
NOTE: example only work on JVM because the evident lack of blocking primitives on JS runtime.
Contributing
If you miss something, feel free to open an issue for a discussion. If there is a clear use case for the proposed enhancement, the PR will be more than welcome.
Testing
Run the Clojure (.clj) tests:
clojure -M:dev -m promesa.tests.main
Run the ClojureScript (.cljs) tests:
corepack enable corepack install yarn install yarn run test
Run the Babashka tests:
bb test:bb