RxJS- A​​ngular2 - 条件流

时间:2016-08-19 01:42:03

标签: angular rxjs

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;
}

}

这是一种有效的方式吗?还是有更好的方法?

1 个答案:

答案 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)