I created imminent for this purpose :
https://github.com/leonardoborges/imminent

It's based on Java's completable futures. I've written an extensive README
in the repo. Have a look, it might be useful for your case.

Cheers,
Leonardo Borges


On 3 Aug. 2017 7:19 am, "Justin Smith" <noisesm...@gmail.com> wrote:

for this sort of logic, I use core.async go blocks containing a call to
core.async/thread, doing some other operation asynchronously with the value
in the channel it returns

(go
  (let [result (<! (thread (do-something))]
    (do-something-else result)))

this is non-blocking and runs in core.async's thread pool and state
machine, and when I have multiple conditions to coordinate on, the kind of
code core.async lets me write is much more readable compared to callback
nesting

I also have my own version of thread which attempts support cancellation
while also handling the attached channel properly, but I haven't done the
work to vet it as generally usable
https://gist.github.com/noisesmith/02ee2ee5dcb8c0290bd8004c4c4d36aa

On Wed, Aug 2, 2017 at 2:09 PM <lawrence.krub...@gmail.com> wrote:

> I stumbled across this old post by Tomasz Nurkiewicz:
>
> http://www.nurkiewicz.com/2013/03/promises-and-futures-in-clojure.html
>
> He writes:
>
> "And here is where the greatest disappointment arrives: neither future
> <http://clojuredocs.org/clojure_core/clojure.core/future> nor promise
> <http://clojuredocs.org/clojure_core/clojure.core/promise> in Clojure
> supports listening for completion/failure asynchronously. The API is pretty
> much equivalent to very limited java.util.concurrent.Future<T>
> <http://nurkiewicz.blogspot.com/2013/02/javautilconcurrentfuture-basics.html>.
> We can create future, cancel it
> <http://clojuredocs.org/clojure_core/clojure.core/future-cancel>, check
> whether it is realized? (resolved)
> <http://clojuredocs.org/clojure_core/clojure.core/realized_q> and block
> waiting for a value. Just like Future<T> in Java, as a matter of fact the
> result of future function even implements java.util.concurrent.Future<T>.
> As much as I love Clojure concurrency primitives like STM and agents,
> futures feel a bit underdeveloped. Lack of event-driven, asynchronous
> callbacks that are invoked whenever futures completes (notice that
> add-watch <http://clojuredocs.org/clojure_core/clojure.core/add-watch> doesn't
> work futures - and is still in alpha) greatly reduces the usefulness of a
> future object. "
>
> That was written in 2013. I think since then the community has found other
> ways to achieve the same goals? I'm curious what patterns have become
> common? Would it be correct to say that for most of the use cases where one
> would otherwise want a notification of completion on a Future, people
> nowadays instead use something like core.async or a library such as
> Manifold?
>
>
>
>
>
>
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with
your first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to