angular - 这是在 angularfire2 中使用 rxjs MergeMap 的正确方法吗?

标签 angular typescript rxjs angularfire2

我是 angular 和 rxjs 的新手, 我正在尝试使用 angularfire2rxjsfirebase 获取三个不同的值,并将其作为 promise 返回。经过多次研究和尝试,我终于使用这段代码成功了。

这是代码(假设 afdb 是 angularfire 数据库):

getThreeValues() {
    return this.afdb.list('firebaseref1').valueChanges().pipe(
        map(data => {
            return data.length;
        }),

        mergeMap(first => {
            return this.afdb.object('firebaseref2').valueChanges().pipe(
                map(second => {
                    return ({first: first, second: second})
                }),
                take(1)
            );
        }),

        mergeMap(firstsecond => {
            return this.afdb.list('firebaseref3').valueChanges().pipe(
                map(third => {
                    return ({...firstsecond, third: third})
                }),
                take(1)
            );
        }),

        take(1))
        .toPromise();
}

代码有效,我得到了 promise ,它解析为包含我需要的三个值的对象。

问题是我不确定这是否是最好的方法(因为我不确定这段代码是如何工作的)。

最佳答案

因为您非常确定您只会获取 .valueChanges() 的第一个值,所以将它们包装到 .forkJoin() 中会更有效率> 而不是 .mergeMapping 他们一路。借助来自 javascript 的解构,您的代码可以看起来像这样简单得多:

getThreeValues() {
    return forkJoin(
        this.afdb.list('firebaseref1').valueChanges().pipe(take(1)),
        this.afdb.object('firebaseref2').valueChanges().pipe(take(1)),
        this.afdb.object('firebaseref3').valueChanges().pipe(take(1))
    )
        .pipe(
            map(([first, second, third]) => ({
                first: first.length,
                second,
                third
            }))
        ).toPromise()
}

关于angular - 这是在 angularfire2 中使用 rxjs MergeMap 的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53275910/

相关文章:

javascript - Angular 动态组件动画离开不起作用

Angular CLI 生成的库 - 无法从其模块导入组件

javascript - Angular 4 复选框管道过滤器

javascript - 通过路由器将输入传递给 Angular 组件

javascript - Angular 4 - 所有路线都不起作用

reactjs - 为什么我的故事书组件的参数显示为可选而不是必需的?

typescript - typeorm中如何正确使用和导出数据源

angular - 如何正确地将 3 种类型的 http 请求顺序且动态地链接在一起?

rxjs - 如何重启rxjs间隔?

javascript - 嵌套 Observables 在 Ionic2/Angular2 应用程序中表现不同