【问题标题】:Combining observables of array objects组合数组对象的可观察对象
【发布时间】:2019-01-13 13:31:37
【问题描述】:

如何使用 rxjs 组合两个或多个可观察数组,即 Observable<Object[]>, Observable<Object[]> 以返回一个 Observable<Object[]>

forkJoinmerge 分别发出两个 Observable<Object[]> 数组。

getEmployeesLeavesByEmployeeNumber2(employeeNumber,afromDate,atoDate) {
    const scenario1 = this.afs.collection(`${environment.FB_LEAVES}`, ref => {
        let query: firebase.firestore.CollectionReference | firebase.firestore.Query = ref;
        query = query.where("employeeNumber", "==", employeeNumber);
        query = query.where("fromDate",">=",afromDate);
        query = query.where("fromDate","<=",atoDate);
        return query;

    }).snapshotChanges()
        .pipe(take(1))
        .pipe(
            map(changes => {
                return changes.map(a => {
                    const data = a.payload.doc.data() as Leave;
                    data.docId = a.payload.doc.id;
                    return data;
                })
            })
        ).pipe(map(leaves => {
            let leavesArr=leaves.filter(leave => leave.status!==environment.LEAVE_STATUS_DECLINED)
            return leavesArr;
        }));

    const scenario2 = this.afs.collection(`${environment.FB_LEAVES}`, ref => {
        let query: firebase.firestore.CollectionReference | firebase.firestore.Query = ref;
        query = query.where("employeeNumber", "==", employeeNumber);
        query = query.where("toDate","<=",afromDate);
        query = query.where("toDate","<=",atoDate);
        return query;

    }).snapshotChanges()
        .pipe(take(1))
        .pipe(
            map(changes => {
                return changes.map(a => {
                    const data = a.payload.doc.data() as Leave;
                    data.docId = a.payload.doc.id;
                    return data;
                })
            })
        ).pipe(map(leaves => {
            let leavesArr=leaves.filter(leave => leave.status!==environment.LEAVE_STATUS_DECLINED)
            return leavesArr;
        }));

    const scenario3 = this.afs.collection(`${environment.FB_LEAVES}`, ref => {
        let query: firebase.firestore.CollectionReference | firebase.firestore.Query = ref;
        query = query.where("employeeNumber", "==", employeeNumber);
        query = query.where("fromDate","<=",afromDate);
        return query;

    }).snapshotChanges()
        .pipe(take(1))
        .pipe(
            map(changes => {
                return changes.map(a => {
                    const data = a.payload.doc.data() as Leave;
                    data.docId = a.payload.doc.id;
                    return data;
                })
            })
        ).pipe(
            filter(leave => {
                return leave!==undefined;
            })
        );
    return merge(scenario1,scenario2);
}

我期待一个可观察的数组但得到 2 个即

emp's leaves:  [{…}]
assign.component.ts:198 leaves array length at assignment error  1
assign.component.ts:168 emp's leaves:  (2) [{…}, {…}]
assign.component.ts:198 leaves array length at assignment error  2

【问题讨论】:

    标签: javascript rxjs


    【解决方案1】:

    我已经让它工作了:

    return forkJoin(scenario1,scenario2).pipe(map((arr) => [...arr[0],...arr[1]] ));
    

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2016-12-11
      相关资源
      最近更新 更多