   (err     [promise]            (.catch   promise #(.error js/console %)))
   (map     [promise func]       (.then    promise #(cljs.core/map func %)))
   (conj    [promise data]       (.then    promise #(cljs.core/conj % data))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  (:require [goog.object :as obj])
  (:require-macros meta.promise))

(defprotocol IPromise
  "A simple protocol implementation for JavaScript Promises.


      (.then (next)
        (fn [result]
          (cljs.core/conj data result))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Promise API ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn promise
  "Returns a new promise, optionally accepts a function as a promise constructor.

