Почему я не могу отправить несколько действий с картой? - PullRequest
1 голос
/ 01 ноября 2019

Я пытаюсь что-то понять Внутри моего эпоса

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: Действия должны быть простыми объектами. Используйте пользовательское промежуточное ПО для асинхронных действий.

Не является ли второй поток первым?

1 Ответ

4 голосов
/ 01 ноября 2019

switchMap подпишется на внутреннюю возвращаемую Наблюдаемую (в данном случае of) и повторно отправит все ее элементы. Таким образом, of испускает 3 элемента, которые распространяются дальше.

С другой стороны, map просто берет значение, возвращенное из его функции "project", и распространяет его дальше. map не волнует, что является возвращаемым значением. Дальнейшая логика не применяется.

Так что в вашем случае map распространяет экземпляр Observable, который не является допустимым действием.

...