使用Redux Observable和Firebase进行异步操作的正确方法是什么?

问题描述 投票:0回答:1

所以我有这部史诗

export const listenToCountryVisitsEpic = (action$, store) => {
    return action$.pipe(
        ofType('UPDATE_TRIP_DETAILS'),
        mergeMap((action) => {
            const userId = store.value.user.id
            const { country, newDetails } = action
            const { people, places } = details
            const scheme = {
                people,
                places,
            }

            firebase.database().ref(`users/${userId}/path`).update(scheme)

            return mergeMap((response) => {
                const payload = { ...JSON.parse(response.request.body), currentDetails: action.currentDetails }
                return [updatedCountrySuccess(payload)]
            })
        }),
    )
}

我想做的是向Firebase发出请求,然后如果成功更新Redux,反过来又将更新响应。如果不成功,那就赶上它

这是正确发布到Firebase,但我需要正确捕获错误。我不希望触发此命令:updatedCountrySuccess,直到我知道它是Firebase的成功或失败为止

我可以为此使用异步/等待吗?

javascript reactjs redux rxjs redux-observable
1个回答
0
投票
import { from } from 'rxjs'; import { catchError } from 'rxjs/operators'; ... return action$.pipe( ofType('UPDATE_TRIP_DETAILS'), mergeMap((action) => { const userId = store.value.user.id const { country, newDetails } = action const { people, places } = details const scheme = { people, places, } return from(firebase.database().ref(`users/${userId}/path`).update(scheme)) .pipe( // `mergeMap` will handle only `next` notifications mergeMap((response) => { const payload = ... return [updatedCountrySuccess(payload)] }), catchError(error => of(errorAction)), ); }), )
© www.soinside.com 2019 - 2024. All rights reserved.