RxJS新手,使用Angular2& @ ngrx / store& /效果。
我试图弄清楚如何制作一个处理来自服务的条件结果的流......如果用户在应用首次运行时登录,则检查是否使用auth凭据存储在LocalStorage中。
这可能是完全错误的处理方式,所以任何建议都值得赞赏。
目前我有效果
@Effect() check$ = this.updates$
.whenAction(AuthActions.AUTHENTICATE_CHECK)
.map(update => this.authService.checkAuth())
// now what?
// returns an observable of false, or a Auth object if LS info found
// needs to return
// this.authActions.authenticateCheckResult(res) if ok and
// this.authActions.authenticateCheckError() if not ok
checkAuth
中的authService
方法就是这样......
checkAuth():Observable {
this._user = <AuthAPI>this.ls.getObject(AuthService.LS_AUTH_KEY);
if(this._user && this._user.accessToken) {
return Observable.of(this._user);
}
else {
return Observable.of(false);
}
}
更新
我这样做......
@Effect() check$ = this.updates$
.whenAction(AuthActions.AUTHENTICATE_CHECK)
.map(update => this.authService.checkAuth())
.map(result => {
if(!result) {
return this.authActions.authenticateCheckError(false);
} else {
return this.authActions.authenticateCheckSuccess(result)
}
});
//
checkAuth():AuthAPI {
this._user = <AuthAPI>this.ls.getObject(AuthService.LS_AUTH_KEY);
if(this._user && this._user.accessToken) {
return this._user;
}
else {
return null;
}
}
这是一种有效的方式吗?还是有更好的方法?
答案 0 :(得分:0)
你也可以像
一样链接你的电话checkAuth():Observable<AuthAPI> {
return Rx.Observable.of(<AuthAPI>this.ls.getObject(AuthService.LS_AUTH_KEY))
.filter(user => user)
.filter(user.accessToken)
.defaultIfEmpty(null)