如果 observable next 未定义,如何 return 默认错误
How to return default error if observable next is undefined
我发出了一个网络请求,我得到了一些回应。每次发现响应值未定义时,我都想 return 默认错误。而且我可能在响应值中有多个级别的对象。
如何用 rxjs 运算符替换下面代码中的 if else 块。
import { ofType } from "redux-observable"
import { from } from "rxjs"
export const savePostEpic = (action$: any) => action$.pipe(
ofType(Types.NewPost),
mergeMap((action: NewPostAction) => {
const { input } = action
return from(somePromise(input) as Promise<MyResult>)
.pipe(
map(response => response.data),
if (response.data === 'undefined') {
return { type: Types.Error, message: 'response is undefined' }
} else {
if (response.data.createPost === 'undefined') {
return { type: Types.Error, message: 'response is undefined' }
} else {
return { type: Types.Post, post: reponse.data.createPost }
}
}
)
})
)
最接近的是https://rxjs.dev/api/operators/defaultIfEmpty
恕我直言,你只需要做一些好的重构就足以减少大量代码
map(response=>(response.data === 'undefined' || response.data.createPost === 'undefined')?
{ type: Types.Error, message: 'response is undefined'}:{ type: Types.Post, post: reponse.data.createPost }
)
--- defaultIfEmpty 用法 ---
pipe(
filter(response=>response.data&&response.data.createPost),
map(response=>({ type: Types.Post, post: reponse.data.createPost })),
defaultIfEmpty({ type: Types.Error, message: 'response is undefined'}),
)
我发出了一个网络请求,我得到了一些回应。每次发现响应值未定义时,我都想 return 默认错误。而且我可能在响应值中有多个级别的对象。
如何用 rxjs 运算符替换下面代码中的 if else 块。
import { ofType } from "redux-observable"
import { from } from "rxjs"
export const savePostEpic = (action$: any) => action$.pipe(
ofType(Types.NewPost),
mergeMap((action: NewPostAction) => {
const { input } = action
return from(somePromise(input) as Promise<MyResult>)
.pipe(
map(response => response.data),
if (response.data === 'undefined') {
return { type: Types.Error, message: 'response is undefined' }
} else {
if (response.data.createPost === 'undefined') {
return { type: Types.Error, message: 'response is undefined' }
} else {
return { type: Types.Post, post: reponse.data.createPost }
}
}
)
})
)
最接近的是https://rxjs.dev/api/operators/defaultIfEmpty 恕我直言,你只需要做一些好的重构就足以减少大量代码
map(response=>(response.data === 'undefined' || response.data.createPost === 'undefined')?
{ type: Types.Error, message: 'response is undefined'}:{ type: Types.Post, post: reponse.data.createPost }
)
--- defaultIfEmpty 用法 ---
pipe(
filter(response=>response.data&&response.data.createPost),
map(response=>({ type: Types.Post, post: reponse.data.createPost })),
defaultIfEmpty({ type: Types.Error, message: 'response is undefined'}),
)