小编DRN*_*RNR的帖子

给BehaviorSubject初始值——值是一个Observable

我知道我无法给出BehaviorSubjectObservable 值,但我需要一种方法来解决这个问题。在应用程序初始化时,我正在获取当前用户(如果存在),并且我需要给出该BehaviorSubject潜在值。所以我的服务代码如下所示:

private user = new BehaviorSubject<User>(this.getUser());
public user$ = this.user.asObservable();

getUser(): User {
  // does obviously not work!
  return this.apiService.getUser()
    .map(data => {
      if(data) {
        return data;
      }
      // do something else
    })  
}
Run Code Online (Sandbox Code Playgroud)

那么是否有一些神奇的 rxjs 运算符可以解决这个问题,或者其他一些可能性?

提前致谢!

observable rxjs behaviorsubject angular

6
推荐指数
1
解决办法
2万
查看次数

无法使用DocumentSnapshot的属性data()

我无法使用data()DocumentSnapshot上的属性。它在控制台中给我一个错误。这是确切的错误:

auth.service.ts(72,20):错误TS2339:类型为“可观察”的属性“数据”不存在。

我尝试以多种不同方式获取数据。所有这些技术都是错误。

服务:

constructor(
  private afAuth: AngularFireAuth,
  private afs: AngularFirestore,
  private router: Router,
  public db: AngularFirestore
) {
    this.user = afAuth.authState;

    this.user.subscribe((user) => {
      if (user) {
        this.userDetails = user;
        console.log(this.userDetails);
      } else {
        this.userDetails = null;
      }
    })
}

getUserName() {
  (this.isLoggedIn()){
    const userD = this.db.collection('users').doc(this.userDetails.uid);
    const doc = userD.get();
    return doc.data().firstName;
  } else {
    console.log('user not logged in');
    return "nothing";
  }
}
Run Code Online (Sandbox Code Playgroud)

angularfire2 angular

6
推荐指数
1
解决办法
52
查看次数

HttpInterceptor处理401错误不返回Observable

我遵循这个例子:https://www.intertech.com/Blog/angular-4-tutorial-handling-refresh-token-with-new-httpinterceptor/

一切都很好,除了方法handle401Error.除非我添加subscribe了拦截器,否则它不会执行.我必须错过一些东西,即使试图遵循这个例子.

这是相关的代码:

零件:

ngOnInit() {
  this.service.getData()
    .subscribe((response: any) => {
      this.message = `Worked with status = ${response.status}`;
    },
    error => this.message = `Failed with status = ${error.status}`);
}
Run Code Online (Sandbox Code Playgroud)

服务:

constructor(private http: HttpClient) {
  this.currentToken = this.authTokenStale;
}

public authTokenStale: string = 'stale_auth_token';
public authTokenNew: string = 'new_auth_token';
public currentToken: string;

getData() {
  return this.http.get<{status}>('https://private-4002d-testerrorresponses.apiary-mock.com/getDataError401');
}

getAuthToken() {
  return this.currentToken;
}

refreshToken(): Observable<string> {
  this.currentToken = this.authTokenNew;
  return Observable.of(this.authTokenNew).delay(200);
}
Run Code Online (Sandbox Code Playgroud)

拦截器:

isRefreshingToken: boolean …
Run Code Online (Sandbox Code Playgroud)

angular-http-interceptors angular angular-httpclient

2
推荐指数
1
解决办法
8705
查看次数