未调用 @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() 中的服务的主要内容,如果未能解决你的问题,请参考以下文章
MVC 中的下拉菜单未加载 WCF 服务调用的编辑函数上的数据