Skip to content

Instantly share code, notes, and snippets.

@Deraen
Created December 20, 2016 21:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Deraen/a8f983f2b9821a0b497db01887a5e735 to your computer and use it in GitHub Desktop.
Save Deraen/a8f983f2b9821a0b497db01887a5e735 to your computer and use it in GitHub Desktop.
Queue without Core.async
(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