未调用 @Effect() 中的服务

Posted

技术标签:

【中文标题】未调用 @Effect() 中的服务【英文标题】:Service in @Effect() isn't called 【发布时间】:2019-12-29 12:47:04 【问题描述】:

我有一种情况,其中调用了效果,但未访问底层服务。是什么原因造成的?

user.effect.ts

@Effect()
getData$ = this.actions$.pipe(
    ofType(UserActions.getData),
    switchMap(() =>
        this.userService.getUserById(localStorage.getItem("uid")).pipe(
            map((data: IUser) => 
                if (data) 
                    return UserActions.dataReceived(
                        payload: UserService.parseData(data)
                    );
                 else 
                    return UserActions.dataNotReceived();
                
            ),
            catchError(err =>
                of(
                    AuthActions.signOutError(
                        errorMessage: err.message,
                        errorCode: err.code
                    )
                )
            )
        )
    )
);

user.service.ts

getUserById(id) 
    this.logger.debug(`Getting user $id`);
    return this.afs
        .collection("users")
        .doc(id)
        .snapshotChanges()
        .pipe(
            map(action => 
                const data = action.payload.data();
                const uid = action.payload.id;
                return  uid, ...data ;
            )
        );

【问题讨论】:

你怎么确定这个效果被调用了? 我可以看到它已注销imgur.com/3asMkMx,但你可以看到状态没有改变 你在你的模块中注册了效果吗? 是的,我有,它已经注册了。 您没有看到任何错误? 【参考方案1】:

您应该使用 return new 而不是 return。像这样

            if (data) 
                return new UserActions.dataReceived(
                    payload: UserService.parseData(data)
                );
             else 
                return new UserActions.dataNotReceived();
            

【讨论】:

以上是关于未调用 @Effect() 中的服务的主要内容,如果未能解决你的问题,请参考以下文章

Ant Design Pro 中的服务端交互

由于 Angular 中的服务调用延迟,数组未正确更新

MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据

ngrx effect 多次调用observer,但只调度了一个action

《Effect Java》学习笔记1———创建和销毁对象

JQuery 按钮未通过 ajax 触发服务调用