Return 来自 Redux Observable 的 Promise
Return a Promise from Redux Observable
也许我在想这个问题,但我与 redux-thunk 一起使用的一个常见模式是 return 一个承诺,这样我就可以在容器中执行一些额外的操作 object当某事完成或失败时。
以 Thunk 为例:
动作创作者:
const action = ({ data }) => (dispatch) =>
fetch(`some http url`)
.then(response => {
if(response.ok) {
return response.json();
}
return Promise.reject(response);
})
连接组件中的某处:
this.props.action("Some Data")
.then(console.log)
.catch(error => console.error("ERROR"));
在 Redux-Observable/Rxjs 中是否有一种干净的方法来做类似的事情?基本上 return 一个动作的承诺,调用一个史诗,一旦 observable 完成,return 就会解决或拒绝。
一般来说,在使用 redux-observable/redux-saga 之类的东西时,我会尽量让人们远离这些模式。相反,如果您正在等待您分派的操作来更新商店的状态,请依赖该状态更新本身或您的 reducer 存储在关于它的状态中的某种事务性元数据。例如{ transactions: { "123": { isPending: true, error: null } }
但是,如果您确实想要这样做,您可以编写(或使用现有的)中间件,returns 来自 dispatch
的 Promise当一些其他指定的动作被调度时(大概是你的epics),这将解决。 redux-wait-for-action 是一个例子(不是推荐,因为我没有使用过)
请记住,Promises 通常是不可取消的,因此您可能会不小心造成组件开始等待操作、用户离开该页面并且组件已卸载而您仍在等待的情况其他动作——这可能会在以后引起怪异,比如他们回到那个页面等。
如果您正在等待 连锁 副作用,那属于您的 epics。启动史诗监听的单个动作,产生副作用,然后发出另一个动作以表示完成。另一个史诗会监听那个完成动作,然后开始另一个副作用,等等。如果你愿意,你可以把它们全部放在一个单一的史诗中,但我发现分离更容易测试和重用。
也许我在想这个问题,但我与 redux-thunk 一起使用的一个常见模式是 return 一个承诺,这样我就可以在容器中执行一些额外的操作 object当某事完成或失败时。
以 Thunk 为例:
动作创作者:
const action = ({ data }) => (dispatch) =>
fetch(`some http url`)
.then(response => {
if(response.ok) {
return response.json();
}
return Promise.reject(response);
})
连接组件中的某处:
this.props.action("Some Data")
.then(console.log)
.catch(error => console.error("ERROR"));
在 Redux-Observable/Rxjs 中是否有一种干净的方法来做类似的事情?基本上 return 一个动作的承诺,调用一个史诗,一旦 observable 完成,return 就会解决或拒绝。
一般来说,在使用 redux-observable/redux-saga 之类的东西时,我会尽量让人们远离这些模式。相反,如果您正在等待您分派的操作来更新商店的状态,请依赖该状态更新本身或您的 reducer 存储在关于它的状态中的某种事务性元数据。例如{ transactions: { "123": { isPending: true, error: null } }
但是,如果您确实想要这样做,您可以编写(或使用现有的)中间件,returns 来自 dispatch
的 Promise当一些其他指定的动作被调度时(大概是你的epics),这将解决。 redux-wait-for-action 是一个例子(不是推荐,因为我没有使用过)
请记住,Promises 通常是不可取消的,因此您可能会不小心造成组件开始等待操作、用户离开该页面并且组件已卸载而您仍在等待的情况其他动作——这可能会在以后引起怪异,比如他们回到那个页面等。
如果您正在等待 连锁 副作用,那属于您的 epics。启动史诗监听的单个动作,产生副作用,然后发出另一个动作以表示完成。另一个史诗会监听那个完成动作,然后开始另一个副作用,等等。如果你愿意,你可以把它们全部放在一个单一的史诗中,但我发现分离更容易测试和重用。