Back
<p! (clj)
(source)macro
(<p! exp)
EXPERIMENTAL: Takes the value of a promise resolution. The value of a rejected promise
will be thrown 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-resolve
(async done
(go
(is (= (<p! (js/Promise.resolve 42)) 42))
(done))))
(deftest interop-resolve-nil
(async done
(go
(is (= (<p! (js/Promise.resolve)) nil))
(done))))
(deftest interop-multiple-resolve
(async done
(go
(let [total (atom 0)]
(swap! total + (<p! (js/Promise.resolve 1)))
(swap! total + (<p! (js/Promise.resolve 2)))
(swap! total + (<p! (js/Promise.resolve 3)))
(is (= @total 6))
(done)))))
(deftest interop-catch
(async done
(let [err (js/Error. "Rejected")]
(go
(is (= err
(ex-cause
(is (thrown?
js/Error
(<p! (js/Promise.reject err)))))))
(done)))))
(deftest interop-catch-non-error
(async done
(let [err "Rejected"]
(go
(is (= err
(ex-cause
(is (thrown?
js/Error
(<p! (js/Promise.reject err)))))))
(done)))))
(deftest interop-nested
(async done
(go
(let [total (atom 0)
first-res (<p! (js/Promise.resolve 1))
second-res (<p! (js/Promise.resolve 2))]
(swap! total + (<p! (js/Promise.resolve 3)))
(swap! total + (<p! (js/Promise.resolve 5)))
(swap! total + first-res)
(swap! total + second-res)
(is (= @total 11))
(done)))))
(deftest interop-multiple-consumer
(async done
(go
(let [p (js/Promise.resolve 42)]
(is (= (<p! p) 42))
(is (= (<p! p) 42))
(done)))))
effectai/effect-network
(ns set-highguard
(:require
[eos-cljs.core :as eos]
[cljs.core :refer [*command-line-args*]]
[clojure.string :as string]
[clojure.pprint :refer [pprint]]
[cljs.core.async.interop :refer [<p!]]
[cljs.core.async :refer [go] :as async]
(let [actions [{:account "eosio"
:name "updateauth"
:authorization [{:actor "theeffectdao" :permission "dao"}]
:data {:account "theeffectdao"
:permission "highguard",
:parent "dao",
:auth
{:threshold 4
:keys []
:accounts [{:permission {:actor "cryptonode42"
:permission "active"}
:weight 1}
{:permission {:actor "djstrikanova"
:permission "active"}
:weight 1}
{:permission {:actor "hazdkmbxgene"
:permission "active"}
:weight 1}
{:permission {:actor "laurenseosio"
:permission "active"}
:weight 1}
{:permission {:actor "miggysmallz1"
:permission "active"}
:weight 1}
{:permission {:actor "rochelle.ai"
:permission "active"}
:weight 1}
{:permission {:actor "scarletalpha"
:permission "active"}
:weight 1}]
:waits []}}}]
proposer "hazdkmbxgene"]
(<p!
(eos/transact
[{:account "eosio.msig"
:name "propose"
:authorization [{:actor proposer :permission "active"}]
:data
{:proposer proposer
:proposal_name "highguard"
:requested [{:actor prop-acc :permission "dao"}]
:trx {:expiration "2023-02-01T10:00:00"
:ref_block_num 0
:ref_block_prefix 0
:max_net_usage_words 0
:max_cpu_usage_ms 0
:delay_sec 0
:context_free_actions []
:actions (<p! (.serializeActions @eos/api (clj->js actions)))
:transaction_extensions []}}}])))