2012-09-22 2 views

답변

4

업데이트 :

이 질문은 물어 core.async이 출시되기 전에 대답했다. core.async는이 문제를 정확하게 해결하도록 설계되었으므로 향후 모든 프로젝트에서 반드시 사용해야합니다.

원래 답 :

그것은 진정으로 비동기 아니지만, 나는 이것에 대한 원자와 전문가를 사용하여 아주 좋아 성장해 왔습니다. 아주 간단하지만 매우 유연한 모델이며 두 언어 모두에 내장되어 있습니다.

극히 간단한 예 :

(def my-channel (atom nil)) 

;; subscribe 
(add-watch my-channel :watcher1 
    (fn [_ _ _ message] 
    (js/alert (str "Received message: " message)))) 

;; publish 
(reset! my-channel "my-message") 

;; unsubscribe 
(remove-watch my-channel :watcher1) 

이 방법의 장점은 원자의 상태가 개체 될 수 있다는 것이다. 여기서는 단순히 원자의 상태를 메시지로 재설정하는 것뿐입니다. 그러나 원자의 상태를 메시지의 전체 히스토리 또는 마지막 5 개 메시지 또는 전체 시스템을 나타내는 상태 시스템으로 만들 수 있습니다. 필요.

+0

간단한 예를 들어 주셔서 감사합니다. 나는 그것이 도움이 될 것이라고 생각한다. –

관련 문제