簡體   English   中英

Angular2:Guard中的嵌套Observable

[英]Angular2: Nested Observables in Guard

我有一個衛隊保護某條路線。 canActive方法中,我需要發出兩個http請求,根據第一個響應觸發第二個請求。 但是,第二個請求永遠不會發生,我認為它是關於返回Observables的嵌套構造。

1 canActivate(route: ActivatedRouteSnapshot,
2          state: RouterStateSnapshot) : Observable<boolean>|boolean {
3  return this.provider.getA().map(
4    dataA => {
5      return this.provider.getB().map(
6        dataB => {
7          return (dataB.allowed);
8        }
9      );
     }
   );  
 }

getA()和getB()都返回以下內容:

getA() : Observable<any> {
  return this.http.post(URL,payload).
                   map(response => response.json());

};

代碼已簡化,但您可以假設getA()和getB()正常工作。 調用Guard時,getA()在網絡上發送,但是從不發送getB()。 調試器在第5行靜默退出。

還有一件事,TypeScript顯示了一個可能已經告訴我解決方案的警告,但是,我太多了Noob with Observables特別知道如何處理它:

Observable<Observable<boolean>>' is not assignable 
to type 'Observable<boolean>'

為了猜測,Observables的構造永遠不會解決,這就是沒有警告的原因,我等到時間結束。 我天真的想法是,只要任何Observable都返回一個布爾值(如第7行所做),訂閱者就會知道如何處理它。

我很高興看到你的提示。 去睡覺了...

你應該在這里使用switchMap

return this.provider.getA().switchMap(
  dataA => {
    return this.provider.getB().map(
      dataB => {
        return (dataB.allowed);
      }
    );
  }
);

在您的代碼中,您正在創建一個Observable of Observables。 switchMap平該結構並發出B到A的發射項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM