我正在使用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)))
)
我在正确的道路上?我是否过于复杂(在map
运算符上可能只是if-else)?可以进一步简化吗?
答案 0 :(得分:1)
我认为我建议您考虑做这样的事情:
我假设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)))
);
这将解决您的两次通话问题,我猜对于下一个开发人员来说更具可读性。