   (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))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

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


  (err     [_]          "Catch and output the error of a promise.")
  (map     [_ func]     "Map a function to the result of the previous promise.")
  (conj    [_ data]     "Conj data onto the result of the previous promise."))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Helpers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- promise-serial [current next]
