簡體   English   中英

多個Observable訂閱

[英]Multiple Observable subscription

我需要多次訂閱才能從NoSQL數據庫中獲取正確的數據。 為了獲取特定項目的用戶列表,我這樣做:

ngOnInit() {
    //Subscription 1 (Service): Get project data
    this.projectService.getCurrentproject().take(1).subscribe(projectData => {
        console.log('Got project data.');
        //Subscription 2: Get project user IDS
        this.af.database.list('/project_roles/'+projectData.$key)
            .subscribe((userMeta) => {
                });
            });
}
  • 正如您所看到的,訂閱中的訂閱,訂閱中的訂閱..並且每個訂閱取決於之前的訂閱。

  • 訂閱3和4可以是並行的。

代碼運行良好,但是我錯過了一些東西,或者這就是我認為使用多個訂閱時,前一個的結果取決於下一個?

更新 :訂閱#2似乎有問題。 訂閱尚未完成,但我開始迭代列表,這給了我一個雙用戶列表!

試試這個。

ngOnInit() {
    this.projectService.getCurrentproject().take(1)
        .flatMap(projectData => {
            return this.af.database.list('/project_roles/'+projectData.$key)
        })
        .flatMap(userMeta => {
            let subs = userMeta.map(projectRole => {
                return Observable.zip([
                    this.af.database.object('/roles/'+projectRole.$value),
                    this.af.database.object('/users/'+projectRole.$key)
                ]).map(([roleData, user]) => {
                    user.role = roleData.$value;
                    return Observable.of(user)
                })
            });
            return Observable.zip(subs)
        })
        .subscribe(users => {
            this.users = users
        })
}

基本上我正在編寫訂閱以獲取發出users數組的單個observable

暫無
暫無

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

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