2012-06-23 5 views
3

Я получаю URL-адрес через прокси, где каждое состояние агента представляет собой вектор, содержащий прокси-узел и порт, из которого он извлекается.Ведение состояния агента при возврате в Clojure

Я пытаюсь вернуть содержимое страницы, извлеченное при сохранении состояния агента как вектора, содержащего хост и порт.

Это то, что у меня есть до сих пор.

(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))) 

К сожалению, в настоящее время я возвращаю агента, а не содержимое URL-адреса.

Любая помощь будет оценена!

ответ

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))) 
+0

, он просто висит ... Я думал, что он сделал работу раньше, но это не кажется последовательно работать. – toofarsideways

+0

Возможно ли, что fetch-url выбрасывает исключение? – DanLebrero

+0

На самом деле это похоже на открытие '' '* sldb clojure/1 * <2>' '', которое я раньше не видел, используя swank в emacs, если это помогает. – toofarsideways