angular – 多个Observable订阅

前端之家收集整理的这篇文章主要介绍了angular – 多个Observable订阅前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要多次订阅才能从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

猜你在找的Angularjs相关文章