为什么我不能用地图发送多个动作?
Why I can't dispatch multiple action with a map?
我想了解我史诗中的一些东西
const loginEpic = (action$, state$) => action$.pipe(
ofType(UsersActions.loginRequest),
switchMap((action: {payload:{email: string, password: string}}) =>
HttpService.PostAsync<apiModels.api_token_auth_request, apiModels.api_token_auth_response>('token-auth', action.payload).pipe(
switchMap(response => {
let token = response && response.data && response.data.token ? response.data.token : '';
return of(
UsersActions.setUserAuth({authKey: token}),
UsersActions.loginSuccess(),
WorkspaceActions.getWorkspacesRequest()
);
}),
catchError((error: string) => {
return of(UsersActions.loginFailed({error}));
})
)
)
);
为什么这有效
switchMap(response => {
let token = response && response.data && response.data.token ? response.data.token : '';
return of(
UsersActions.setUserAuth({authKey: token}),
UsersActions.loginSuccess(),
WorkspaceActions.getWorkspacesRequest()
);
}),
但这行不通
map(response => {
let token = response && response.data && response.data.token ? response.data.token : '';
return concat(
of(UsersActions.setUserAuth({authKey: token})),
of(UsersActions.loginSuccess()),
of(WorkspaceActions.getWorkspacesRequest())
);
}),
Uncaught Error: Actions must be plain objects. Use custom middleware
for async actions.
第二个不也是第一个流吗?
switchMap
将订阅返回的内部 Observable(在本例中为 of
)并重新发送其所有项目。因此 of
发出 3 个项目,这些项目会进一步传播。
另一方面,map
只是获取从其 "project" 函数返回的值并进一步传播它。 map
不关心返回值是什么。没有应用进一步的逻辑。
所以在你的情况下 map
正在传播一个 Observable 的实例,这不是一个有效的动作。
我想了解我史诗中的一些东西
const loginEpic = (action$, state$) => action$.pipe(
ofType(UsersActions.loginRequest),
switchMap((action: {payload:{email: string, password: string}}) =>
HttpService.PostAsync<apiModels.api_token_auth_request, apiModels.api_token_auth_response>('token-auth', action.payload).pipe(
switchMap(response => {
let token = response && response.data && response.data.token ? response.data.token : '';
return of(
UsersActions.setUserAuth({authKey: token}),
UsersActions.loginSuccess(),
WorkspaceActions.getWorkspacesRequest()
);
}),
catchError((error: string) => {
return of(UsersActions.loginFailed({error}));
})
)
)
);
为什么这有效
switchMap(response => {
let token = response && response.data && response.data.token ? response.data.token : '';
return of(
UsersActions.setUserAuth({authKey: token}),
UsersActions.loginSuccess(),
WorkspaceActions.getWorkspacesRequest()
);
}),
但这行不通
map(response => {
let token = response && response.data && response.data.token ? response.data.token : '';
return concat(
of(UsersActions.setUserAuth({authKey: token})),
of(UsersActions.loginSuccess()),
of(WorkspaceActions.getWorkspacesRequest())
);
}),
Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.
第二个不也是第一个流吗?
switchMap
将订阅返回的内部 Observable(在本例中为 of
)并重新发送其所有项目。因此 of
发出 3 个项目,这些项目会进一步传播。
另一方面,map
只是获取从其 "project" 函数返回的值并进一步传播它。 map
不关心返回值是什么。没有应用进一步的逻辑。
所以在你的情况下 map
正在传播一个 Observable 的实例,这不是一个有效的动作。