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 []}}}])))