Ring:有没有办法异步管理来自同一客户端ip的http请求?

时间:2015-11-18 23:58:57

标签: clojure ring

以便将以下请求放入队列并且在发送前任的响应之前不会处理?

我正在尝试写入数据库然后很快,允许用户查询和更新他/她最近插入的文档

1 个答案:

答案 0 :(得分:0)

您应该查看core.asynccljs-http

您需要使用(chan)创建一个确认通道,使用回调编写数据库写入函数,将>!信号放入确认通道。

(defn database-write [data db-params callback]
    ;Do stuff
    (callback status-of-the-computation))

(def confirmation-chan (chan))

;First operation
(go 
   (database-write ;data ;db-params 
         (fn [x] (>! confirmation-chan x))))

;Second operation
(go 
   (when (<! confirmation-chan) 
       (http/post "http://example.com" {:form-params {:key1 [1 2 3] :key2 "value2"}})))

第二次操作不会开始,直到第一次操作完成。