如果 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'}),
)