On Sunday, April 5, 2015 at 9:13:57 PM UTC+10, whodidthis wrote:
> On Saturday, April 4, 2015 at 7:10:00 AM UTC+3, Mike Thompson wrote:
> > So the problem sequence would be:
> >    1.  first event handler called with db snapshot
> >    2.  sync-dispatch called, making changes to app-db 
> >    3.  first event handler finishes, and the value it returns is written 
> > into app-db 
> > 
> > The changes in step 2 are lost.
> 
> I tried to replicate this but with no luck:
> (register-handler
>   ::input-change
>   (fn [db [_ value]]
>     (println "input changed to" value)
>     (assoc db :my-value value)))
> (register-handler
>   ::badtimes
>   (fn [db _]
>     (let [my-future (+ (.getTime (js/Date.)) 3000)]
>       (println "badtimes START")
>       (loop []
>         (if (< (.getTime (js/Date.)) my-future)
>           (recur)))
>         (println "badtimes END")
>         (assoc db :badtimes my-future))))
> 
> ::badtimes called with dispatch, ::input-change called with dispatch-sync 
> while badtimes running i get:
> 
> badtimes START
> badtimes END
> input change to a
> input change to ab
> input change to abc... etc
> 
> Since handler functions are always synchronous could the warnings on 
> dispatch-sync be a non-issue? Dispatch-synced events get in front of the line 
> but they still have to wait for the current handler call to end. So there 
> should be no problems as everyone gets the new db snapshot. Unless i'm 
> missing something huge


What I'm saying is that you can't use dispatch-sync inside an event handler ...

(register-handler
  :a
  (fn [db _]
    (assoc db :a 100))) 

(register-handler
  :b
  (fn [db _]
    (dispatch-sync [:a])      ;; <-- problem - change is lost
    (assoc db :b 5))) 

If you:
    (dispatch [:b])   
then afterwards, in app-db:
   - :b will have a value of 5
   - the change to :a (to 100) will not be there

--
Mike


-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to