Created
December 20, 2016 21:43
-
-
Save Deraen/a8f983f2b9821a0b497db01887a5e735 to your computer and use it in GitHub Desktop.
Queue without Core.async
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defonce reloader (atom {:deferred nil | |
:queue []})) | |
(declare maybe-load-next) | |
(defn ready [state next] | |
(next (assoc state :deferred nil))) | |
(defn load-next [state] | |
(let [[file & queue] (:queue state) | |
deferred (jsloader/load file)] | |
(.addBoth deferred #(swap! reloader ready maybe-load-next)) | |
(assoc state | |
:queue (vec queue) | |
:deferred deferred))) | |
(defn maybe-load-next [state] | |
(if (:deferred state) | |
state | |
(if (seq (:queue state)) | |
(load-next state)))) | |
(defn queue-file-load! [file] | |
(:deferred (swap! reloader (fn [state] | |
(maybe-load-next (update state :queue conj file)))))) | |
(defn patch-goog-base! [] | |
(set! (.-provide js/goog) (.-exportPath_ js/goog)) | |
(set! (.-CLOSURE_IMPORT_SCRIPT (.-global js/goog)) (fn [file] | |
(when (.inHtmlDocument_ js/goog) | |
(queue-file-load! file))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment