Back

p->c (clj)

(source)

function

(p->c p)
EXPERIMENTAL: Puts the promise resolution into a promise-chan and returns it. The value of a rejected promise will be wrapped in a instance of ExceptionInfo, acessible via ex-cause.

Examples

clojure/core.async
(ns cljs.core.async.interop-tests
  (:require-macros [cljs.core.async.macros :refer [go]])
  (:require [cljs.core.async :refer [<!]]
            [cljs.core.async.interop :refer [p->c] :refer-macros [<p!]]
            [cljs.test :refer-macros [deftest is async]]))

(deftest interop-p->c-semantics
  (async done
         (go
           (let [c (p->c (js/Promise.resolve 42))]
             (is (= (<! c) 42))
             (is (= (<! c) 42))
             (done)))))
lambda-toolshed/papillon
(ns lambda-toolshed.papillon.async
  #?(:cljs
     (:require [clojure.core.async :as core.async]
               [clojure.core.async.impl.protocols :refer [ReadPort]]
               [cljs.core.async.interop :as core.async.interop :refer [p->c]])))

#?(:cljs
   (do
     (extend-type js/Promise
       ReadPort
       (take! [this handler]
         (->
          this
          p->c
          (#(core.async/take 1 %))
          (clojure.core.async.impl.protocols/take! handler))))))