Commit 57e9e62 1 parent f206eb6 commit 57e9e62 Copy full SHA for 57e9e62
File tree 4 files changed +37
-11
lines changed
4 files changed +37
-11
lines changed Original file line number Diff line number Diff line change 5
5
:lint-as
6
6
{portal.async/let clojure.core/let
7
7
portal.sync/let clojure.core/let
8
+ portal.async/try clojure.core/try
9
+ portal.sync/try clojure.core/try
8
10
reagent.core/with-let clojure.core/let
9
11
portal.bench/simple-benchmark clojure.core/let
10
12
portal.runtime.macros/extend-type? clojure.core/extend-type}}
Original file line number Diff line number Diff line change 1
1
(ns ^:no-doc portal.async
2
- (:refer-clojure :exclude [let promise])
2
+ (:refer-clojure :exclude [let try promise])
3
3
#? (:portal (:import ) :cljs (:require-macros portal.async)))
4
4
5
5
(defmacro do [& body]
6
6
(reduce
7
7
(fn [chain form]
8
8
`(.then ~chain
9
- (fn [] (js/Promise.resolve ~form))))
10
- `(js/Promise.resolve nil )
9
+ (fn [] (.resolve js/Promise ~form))))
10
+ `(.resolve js/Promise nil )
11
11
body))
12
12
13
13
(defmacro let [bindings & body]
14
14
(->> (partition-all 2 bindings)
15
15
reverse
16
16
(reduce (fn [body [n v]]
17
- `(.then (js/Promise.resolve ~v)
17
+ `(.then (.resolve js/Promise ~v)
18
18
(fn [~n] ~body)))
19
19
`(portal.async/do ~@body))))
20
20
21
+ (defmacro try [& body]
22
+ (reduce
23
+ (fn [chain form]
24
+ (cond
25
+ (and (coll? form) (= 'finally (first form)))
26
+ `(.finally ~chain
27
+ (fn []
28
+ (portal.async/do ~@(rest form))))
29
+
30
+ (and (coll? form) (= 'catch (first form)))
31
+ (clojure.core/let [[_ _type ex-binding & body] form]
32
+ `(.catch ~chain
33
+ (fn [~ex-binding]
34
+ (portal.async/do ~@body))))
35
+
36
+ :else
37
+ `(.then ~chain
38
+ (fn []
39
+ (.resolve js/Promise ~form)))))
40
+ `(.resolve js/Promise nil )
41
+ body))
Original file line number Diff line number Diff line change 380
380
381
381
(defn invoke [{:keys [f args]} done]
382
382
(let [f (if (symbol? f) (get-function f) f)]
383
- (try
383
+ (a/ try
384
384
(a/let [return (apply f args)]
385
385
(done (assoc (source-info f) :return return)))
386
386
(catch #?(:clj Exception :cljr Exception :cljs js/Error) e
387
387
(done (assoc
388
388
(source-info f)
389
389
:error
390
390
(-> (ex-info
391
- " invoke exception"
392
- {:function f
393
- :args args
394
- :found? (boolean (get-function f))}
391
+ (ex-message e)
392
+ {::function f
393
+ ::args args
394
+ ::found? (some? f)
395
+ ::data (ex-data e)}
395
396
e)
396
397
datafy
397
- (assoc :runtime #?( :bb :bb :clj :clj :cljs :cljs :cljr :cljr )))))))))
398
+ (assoc :runtime ( runtime )))))))))
398
399
399
400
(def ops {:portal.rpc/invoke #'invoke})
400
401
Original file line number Diff line number Diff line change 1
1
(ns ^:no-doc portal.sync
2
- (:refer-clojure :exclude [let ]))
2
+ (:refer-clojure :exclude [let try ]))
3
3
4
4
(defmacro let [bindings & body]
5
5
`(clojure.core/let ~bindings ~@body))
6
+
7
+ (defmacro try [& body] `(~'try ~@body))
You can’t perform that action at this time.
0 commit comments