I am new to Clojure and I was having a look at the implementation of Lacinia (GraphQL implementation in Clojure) when I stumbled upon the following function:
(defn execute-parsed-query "Prepares a query, by applying query variables to it, resulting in a prepared query which is then executed. Returns a result map (with :data and/or :errors keys)." [parsed-query variables context] (let [result-promise (promise) execution-result (execute-parsed-query-async parsed-query variables context)] (resolve/on-deliver! execution-result (fn [result] (deliver result-promise result))) ;; Block on that deliver, then return the final result. @result-promise))
In this function they create a promise object and immediately try to dereference it.
So why use a promise at all when the thread immediately blocks anyway?
Am I missing something?