在Clojure中返回时维护代理状态

时间:2012-06-23 14:49:05

标签: clojure

我通过代理获取url,其中每个代理的状态是一个包含代理主机和从中获取的端口的向量。

我正在尝试返回所提取页面的内容,同时将代理的状态保持为包含主机和端口的向量。

这是我到目前为止所做的。

(defn fetch-url-with-proxy [url]
  (letfn [(fetch-fn [host-port url]
            (let [[host port] host-port]
              (fetch-url url host port)
              host-port))]
    (send-off (agent-from-pool proxy-pool) fetch-fn url)))

不幸的是我现在返回代理,而不是fetch-url的内容。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

使用承诺等待结果:

(defn fetch-url-with-proxy [url]
  (letfn [(fetch-fn [host-port url result]
      (let [[host port] host-port]
        (deliver result (fetch-url url host port))
          host-port))]
  (let [result (promise)]
    (send-off (agent-from-pool proxy-pool) fetch-fn url result)
    @result)))