-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
同时执行多个同步 Action 会出现前一个 action 的操作被覆盖问题 #66
Comments
1.0 版本由于无法区分同异步 function, 所以同步 action 也被当做异步来做处理了。 为了解决这个问题,有几种可行的处理方案: 方案一对于异步 action 不允许直接修改 state,调用同步方法: {
state: {},
actions: {
addBy: (prevState, payload) => ({...prevState, count: prevState.count + payload}),
addByAsync: async(state, payload, actions) => {
await delay(1000)
actions.addBy(payload)
}
}
} 实现这样的 API 的前提是在内部能够对方法进行区分处理(判断是否是异步方法然后做特殊处理)。我留意到了在 stackoverflow 和 TC 39 下的讨论。 因此该方案是不可行的。 方案二区分同步和异步方法: {
state: {},
reduces: {
addBy: (prevState, payload) => ({...prevState, count: prevState.count + payload}),
},
effects: {
addByAsync: async(state, payload, actions) => {
await delay(1000)
actions.addBy(payload)
}
}
} 内部实现上来说比较简单,但对于用户来说其缺点是我之前所描述过的「纯对象好处」的反例:#59 (comment) 在版本策略上:
方案三为了尽量减少用户升级的成本和版本的分化,将「区分同步和异步方法」(参考方案二)作为新 feature。 发布 1.1.0:
|
牵扯到两个变化:
目前看来这两个变化是不可避免的,而且是两个实实在在的 break change,版本策略上发 1.1.0 风险是否可控(包括 icejs 里的依赖)? |
严格地按照版本策略来说,这个 break change 确实应该升级为 2.0.0 。 |
最终决定使用方案三,PR:#65 |
The text was updated successfully, but these errors were encountered: