Skip to content

Instantly share code, notes, and snippets.

@visibletrap
Last active December 3, 2017 04:58
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 visibletrap/93fbcbf01219289784425868436952a5 to your computer and use it in GitHub Desktop.
Save visibletrap/93fbcbf01219289784425868436952a5 to your computer and use it in GitHub Desktop.
(ns sof.async
(:require [ring.adapter.jetty :as jetty]
[clj-http.client :as client]
[ring.middleware.json :refer [wrap-json-response]]
[ring.util.response :refer [response]]))
(defn handler [request respond raise]
(client/get "http://example.com"
{:async? true}
(fn [response] (respond {:body "something"}))
(fn [exception] (raise {:body "error"}))))
(def app (wrap-json-response handler))
(defonce server (atom nil))
(comment
(do (when @server (.stop @server))
(reset! server (jetty/run-jetty app {:port 4000 :async? true :join? false}))))
; dependencies
;[[org.clojure/clojure "1.9.0-RC2"]
; [ring/ring-core "1.6.3"]
; [ring/ring-jetty-adapter "1.6.3"]
; [clj-http "3.7.0"]
; [ring/ring-json "0.5.0-beta1"]]
(ns sof.concurrent
(:require [ring.adapter.jetty :as jetty]
[clj-http.client :as client]
[ring.middleware.json :refer [wrap-json-response]]
[ring.util.response :refer [response]]))
(defn handler [request]
(let [result1 (promise)
result2 (promise)]
(client/get "http://example.com/"
{:async? true}
(fn [response] (deliver result1 {:success true :body "something"}))
(fn [exception] (deliver result1 {:success false :body "error"})))
(client/get "http://example.com/"
{:async? true}
(fn [response] (deliver result2 {:success true :body "something"}))
(fn [exception] (deliver result2 {:success false :body "error"})))
(cond
(and (:success @result1)
(:success @result2))
(response {:result1 (:body @result1)
:result2 (:body @result2)})
(not (:success @result1))
(throw (ex-info "fail1" (:body @result1)))
(not (:success @result2))
(throw (ex-info "fail2" (:body @result2))))))
(def app (wrap-json-response handler))
(defonce server (atom nil))
(comment
(do (when @server (.stop @server))
(reset! server (jetty/run-jetty app {:port 5000 :join? false}))))
(ns sof.core
(:require [ring.adapter.jetty :as jetty]
[clj-http.client :as client]
[ring.middleware.json :refer [wrap-json-response]]
[ring.util.response :refer [response]]))
(defn handler [request]
(response {:result (client/get "http://example.com")}))
(def app (wrap-json-response handler))
(comment
(handler {}))
(defonce server (atom nil))
(comment
(do (when @server (.stop @server))
(reset! server (jetty/run-jetty app {:port 3000 :join? false}))))
; dependencies
;[[org.clojure/clojure "1.9.0-RC2"]
; [ring/ring-core "1.6.3"]
; [ring/ring-jetty-adapter "1.6.3"]
; [clj-http "3.7.0"]
; [ring/ring-json "0.5.0-beta1"]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment