在可观察的redux中从调度多个操作
我正在尝试向redux发送多个操作。这是我的密码在可观察的redux中从调度多个操作,redux,rxjs,redux-observable,Redux,Rxjs,Redux Observable,我正在尝试向redux发送多个操作。这是我的密码 action$.pipe( ofType(trigger), mergeMap(({ payload }) => from(endpoint(payload)).pipe( map(response => // this works fine // setData(response.data) // this doesn't
action$.pipe(
ofType(trigger),
mergeMap(({ payload }) =>
from(endpoint(payload)).pipe(
map(response =>
// this works fine
// setData(response.data)
// this doesn't
concat(
of(setData(response.data)),
of({ type: 'hello' })
)
// I also tried
[
of(setData(response.data)),
of({ type: 'hello' })
]
)
)
),
catchError(err => Promise.resolve(creators.setError(err)))
)
单个分派是有效的,但如果我像上面那样尝试多个项目,我会得到
Uncaught错误:操作必须是普通对象。使用自定义中间件进行异步操作。
映射
只是将一个项目映射到另一个项目,因此当您返回[action1,action2]
时,您仍然返回一个数组,并且redux observable
尝试将其视为一个操作本身。相反,您需要的是“展开”返回的数组(或使用concat
创建的可观察数组)
因此,您可以使用mergeMap
(或concatMap
)而不是使用map
),当您返回一个数组时,它将迭代该数组并对每个项目进行单独的发射:
mergeMap(response => [
setData(response.data),
{ type: 'hello' },
]),
如果这看起来太奇怪,您可以使用from
将数组包装起来,使其更加明显:
mergeMap(response => from([
setData(response.data),
{ type: 'hello' },
])),
您甚至可以使用一个的:
mergeMap(response => of(
setData(response.data),
{ type: 'hello' },
)),
可能是重复的,非常感谢。我花了一天时间想弄明白mergeMap
是我所缺少的。在某些情况下,switchMap可以作为替代方案。开关映射(()=>[action1,action2])