reactjs - 在 catchError 中发出多个操作 - Redux Observable
问题描述
我有使用 rxjs 史诗的身份验证功能:
export const authWithEmailPasswordEpic = action$ =>
action$.pipe(
filter(authUser.match),
switchMap(({payload}) =>
defer(() =>
from(firebaseEmailPasswordAuth(payload)).pipe(
mergeMap(() => of(clearAlertState(), stopLoading())),
catchError(err =>
of(clearState(), createAlert({
status: err.code,
alertType: RED_ALERT,
alertTitle: err.message
})),
)
)
)
)
);
如果用户凭据不正确,我将发送警报,但我也想在 5 秒左右后删除警报。因此,我相信我需要发出两个动作来实现这一点,第二个是:
of(toggleAlert()).pipe(delay(5000)))
我将如何实现这一目标,或者有更好的方法吗?
解决方案
您可以使用delay(5000)
aftercatchError
和mergeWith
the来实现,of(toggleAlert())
如下所示:
export const authWithEmailPasswordEpic = action$ =>
action$.pipe(
filter(authUser.match),
switchMap(({ payload }) =>
defer(() =>
from(firebaseEmailPasswordAuth(payload)).pipe(
mergeMap(() => of(clearAlertState(), stopLoading())),
catchError(err =>
of(
clearState(),
createAlert({
status: err.code,
alertType: RED_ALERT,
alertTitle: err.message
})
)
),
mergeWith(of(toggleAlert()).pipe(delay(5000)))
)
)
)
);
推荐阅读
- javascript - 按比例缩放 Img 以填充没有 CSS 覆盖的整个容器 (javascript/React)
- algorithm - Ehat 是二项式系数的递归和动态规划方法的空间复杂度吗?
- forms - jQuery vs Vuejs 表单管理最佳实践
- javascript - 写入 Firestore 问题
- linux - 我想创建一个虚拟以太网网络设备驱动程序,但没有获得任何接口端口
- java - 内存管理和 Java 堆
- java - 动态选择要使用的 DAO
- ios - 即使后台获取已关闭,如何在没有通知的情况下接收消息
- macos - Arduino串行监视器打印设置输出两次
- ruby - 为什么 self.method_name 不能访问私有方法?其中只有私有方法名可以在任何方法中访问 ruby 中的私有方法