Liking cljdoc? Tell your friends :D
All platforms.

jtk-dvlp.async.interop.callback


cb->cclj/smacro

(cb->c exp)
(cb->c [f & forms :as _exp] auto-close?)

Creates a chan base on the callbacks of exp. Symbols callback / resolve and reject marks the callback position of exp to put resolutions and rejections onto the new created channel. If no mark is given, assumes resolve position is the last arg of exp and will append it.

exp callbacks must expect only one argument!

Rejections will be used as cause for a new created ExceptionInfo.

Given auto-close? false the caller of cb->c is responsible for closing the channel! Otherwise channel will be closed after first put (resolve or reject).

If calling exp fails an ExceptionInfo will be put onto the new created channel with fail information. The channel will be closed then.

Example:

(let [callback-based-fn
      (fn callback-based-fn
        [value-to-carry has-to-fail? success fail]
        (Thread/sleep 1000)
        (if has-to-fail?
          (fail [:nope value-to-carry])
          (success [:yeah value-to-carry])))]

  (go*
   (try
     (-> (callback-based-fn
          5 true
          resolve
          ;; fn must be inline so that `cb->c` can recognize `reject` mark!
          (fn modifiy-error-before-reject-it [error]
            (->> {:error error}
                 (ex-info "nix-gut")
                 (reject))))

         (<cb!)
         (println))

     (catch clojure.lang.ExceptionInfo e
   (println e)))))
Creates a `chan` base on the callbacks of `exp`. Symbols
`callback` / `resolve` and `reject` marks the callback
position of `exp` to put resolutions and rejections onto
the new created channel. If no mark is given, assumes `resolve`
position is the last arg of `exp` and will append it.

`exp` callbacks must expect only one argument!

Rejections will be used as `cause` for a new created `ExceptionInfo`.

Given `auto-close?` `false` the caller of `cb->c` is responsible for
closing the channel! Otherwise channel will be closed after first put
(resolve or reject).

If calling `exp` fails an `ExceptionInfo` will be put onto the
new created channel with fail information. The channel will be
closed then.

Example:
```
(let [callback-based-fn
      (fn callback-based-fn
        [value-to-carry has-to-fail? success fail]
        (Thread/sleep 1000)
        (if has-to-fail?
          (fail [:nope value-to-carry])
          (success [:yeah value-to-carry])))]

  (go*
   (try
     (-> (callback-based-fn
          5 true
          resolve
          ;; fn must be inline so that `cb->c` can recognize `reject` mark!
          (fn modifiy-error-before-reject-it [error]
            (->> {:error error}
                 (ex-info "nix-gut")
                 (reject))))

         (<cb!)
         (println))

     (catch clojure.lang.ExceptionInfo e
   (println e)))))
```
sourceraw docstring

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close