Comments (6)
Just tested by patching the example counter with:
[:button {:on-click #(doseq [i (range 10)] (citrus/dispatch! r :counter :inc))} "+10"]
and yes, the counter only increments by 1.
Whereas:
[:button {:on-click #(doseq [i (range 10)] (citrus/dispatch-sync! r :counter :inc))} "+10"]
increments by 10.
from citrus.
OK, I'm now of the opinion this is the behaviour we should expect for the asynchronous case as forcing a wait on state handling before enqueuing another event would be equivalent to synchronous behaviour.
from citrus.
This is definitely a bug. Async events are batched and executed asynchronously, but this should not change the behavior. I’ll look into this.
from citrus.
Here's what I'm using for now:
(r/dispatch! [this cname event args]
(queue-effects!
queue
[cname #((get controllers cname) event args (get % cname))])
(schedule-update!
batched-updates
scheduled?
(fn []
(let [effects (into [] @queue)]
(clear-queue! queue)
(let [[curr-state handlers]
(reduce
(fn [[curr-state handlers] [cname ctrl]]
(let [effects (ctrl curr-state)]
[(if-let [s (:state effects)]
(assoc curr-state cname s)
curr-state)
(concat handlers (->> (dissoc effects :state)
(filter (comp seq second))))]))
[@state []]
effects)]
(reset! state curr-state)
(m/doseq [[id effect] handlers]
(when-let [handler (get effect-handlers id)]
(handler this cname effect))))))))
I can make a PR if you are interested.
from citrus.
@roman01la - yes - much easier to think about that way! Code from @mjmeintjes fixes my test case.
from citrus.
Just published a fix in 3.0.1
. @mjmeintjes thank you for that code sample
from citrus.
Related Issues (20)
- Rename to strum? HOT 8
- Project renaming
- `nil` is not a valid state for `dispatch!` not `dispatch-sync!` HOT 6
- Re-frame side-causes (aka coeffect) as data? HOT 10
- `update-in`-style state updates? HOT 5
- Cannot use custom scheduling function HOT 14
- keep state of reconciler when recompiling/reloading namespace HOT 1
- js/setTimeout for function using dispatch-sync! HOT 4
- Updating state with same values does not trigger render HOT 2
- Better state-handling in citrus ? HOT 24
- Behaviour When Mixing Dispatch and Dispatch Sync HOT 3
- Controller/control function will fail unless it is a multimethod HOT 2
- 3.2.1 not available in repos HOT 1
- Difference in subscriptions with reducers between CLJ and CLJS HOT 1
- Modifying the state backend-side HOT 1
- Implement default-handler option to allow full customization of event-handling HOT 4
- [FEEDBACK WANTED] Are you using co-effects? HOT 3
- Add @martinklepsch as a collaborator HOT 1
- adding `clj-commons/citrus` overrules `resources/public/index.html` script[src] HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from citrus.