首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS - Finalize不触发

RxJS - Finalize不触发
EN

Stack Overflow用户
提问于 2021-08-18 15:56:14
回答 2查看 229关注 0票数 1

对于注销请求,我希望在请求成功和失败时分派相同的操作。为此,我考虑使用finalize()运算符。

然而,我似乎不能让它工作,因为它似乎从来没有被执行过。

效果:

代码语言:javascript
复制
/**
 * When the user logs out :
 * Try to delete its push token
 * Clear user
 */
logout$ = createEffect(() =>
    this.actions$.pipe(
        ofType(ClassicAuthActions.logout),
        switchMap(action => this.api.logout().pipe(
            map(() => ClassicAuthActions.logoutDidSuccess()),
            catchError(err => of(ClassicAuthActions.logoutDidFail())),
            finalize(() => of(
                    ClassicAuthActions.deleteUserCommunicationToken(),
                    ClassicAuthActions.clearUser(action.redirect)
            )),
        ))
    )
);

我对RxJS比较陌生,所以如果有任何帮助,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-18 17:13:35

finalize是一个副作用运算符,因此您不能从它返回更多的值。

如果只想用一些值结束一个可观察对象,可以使用endWith

代码语言:javascript
复制
numbers$.pipe(endWith(42));

对于更复杂的场景,比如以另一个可观察对象结束,像concatWith这样的东西将是可行的:

代码语言:javascript
复制
numbers$.pipe(concatWith(of(42)));
票数 3
EN

Stack Overflow用户

发布于 2021-08-18 16:30:33

由于您使用switchMap访问看似是HTTP的调用,因此在logout$拥有订阅者之前不会发生任何事情

在出现错误的情况下,您似乎没有在catchError中重新抛出错误。由于您捕获了finalize,因此不再有错误,这就是为什么在出错时不会调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68835647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档