An open API service indexing awesome lists of open source software.

https://github.com/funcool/promesa

A promise library & concurrency toolkit for Clojure and ClojureScript.
https://github.com/funcool/promesa

async-await asynchronous-programming clojure clojurescript completablefuture concurrency deferred non-blocking promises threads virtual-threads

Last synced: about 17 hours ago
JSON representation

A promise library & concurrency toolkit for Clojure and ClojureScript.

Awesome Lists containing this project

README

          

# promesa #

[![Clojars Project](http://clojars.org/funcool/promesa/latest-version.svg)](http://clojars.org/funcool/promesa)

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][1].

## Getting Started

deps.edn:

```clojure
funcool/promesa {:mvn/version "11.0.678"}
```

Or you can try the latest RC:

```clojure
funcool/promesa {:mvn/version "12.0.0-RC2"}
```

You also can get it via git:

```clojure
funcool/promesa
{:git/sha "f152066"
:git/tag "12.0.0-RC2"
:git/url "https://github.com/funcool/promesa"}
```

## On the REPL

```clojure
(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:

``` shell
clojure -M:dev -m promesa.tests.main
```

Run the ClojureScript (.cljs) tests:

``` shell
corepack enable
corepack install
yarn install
yarn run test
```

Run the Babashka tests:

``` shell
bb test:bb
```

[1]: https://funcool.github.io/promesa/latest/