RxJS - улучшить ветвление операций - PullRequest
0 голосов
/ 17 декабря 2018

Я использую Angular с классом HttpClient.
Мне нужно отличить действительный вызов (HTTP 200) от вызова с ошибкой (HTTP не 200 или пользовательский ответ).
В настоящее время яиспользуя этот шаблон:

const httpSource$ = this.httpClient.get<MyType>(url)
const valid$ = httpSource$.pipe(
    filter(result => result.code === 0),
    tap(() => this.logger.debug(...)),
    map(result => Result.valid(result.value))
)
const error$ = httpSource$.pipe(
    filter(result => result.code !== 0),
    tap(() => this.logger.debug(...)),
    map(result => Result.error(result.message, result.value))
)

return merge(valid$, error$).pipe(
    catchError(e => of(Result.error<FunReturnType>>(e.message)))
)

Я на правильном пути?Я слишком усложняю (это может быть просто оператор if * else map)?Можно ли это еще больше упростить?

1 Ответ

0 голосов
/ 17 декабря 2018

По моему мнению, я предлагаю вам сделать что-то вроде этого:

Я предполагаю, что Result.valid и Result.error оба являются статическими помощниками для преобразования ответа API в расходуемый объект над вашим приложением.

httpSource$.pipe(
    tap(() => this.logger.debug(...)),
    map(result => {
        if(result.code === 0) {
            return Result.valid(result.value);
        }
        else {
            Result.error(result.message, result.value);
        }
    }),
    catchError(e => of(Result.error<FunReturnType>>(e.message)))
);

это решит ваш двойной вызов и будет более читабельным для следующего разработчика, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...