首页 > 解决方案 > 从两个 observable 访问数据,无需多个订阅

问题描述

我的第一个 observable 发出关于我的用户的数据(来自 Firebase)。在发出此数据时,我想触发对 Firebase 的第二次调用,从不同的集合中检索各种额外的用户信息。

我可以很好地单独管理这两个操作,但显然后一个调用应该只在第一个调用成功后才真正发生。我想这与此有关,mergeMap但我不知道该怎么做。应该向关闭/拒绝投票者指出,尽管我尝试过,但没有找到类似的问题,这些问题既能得到回答,又能以我可以完全匹配我无法理解的方式提出解决方案。

this._auth.userState$
    .mergeMap(user => this._userMetaData.getData(user.uid))
    .subscribe(data => {
        console.log(data);
    });

这是我最初的努力。我希望 console.log 会(以某种方式)返回两个调用的数据。相反,它只记录一个空数组。

谁能在这里指出我正确的方向?

标签: javascriptangularrxjsobservable

解决方案


我看到 2 个不同的点值得强调。

1)在提交中,您要访问 2 个调用返回的数据:

这可以通过以下方式完成

.mergeMap(user => this._userMetaData.getData(user.uid) .map(data => ({user, data}) )

在这里,您基本上通过 last 创建了map一个 return,它是一个引用第一次调用返回的用户和​​第二次调用返回的数据的对象

2) 在日志中,您会看到一个空数组:

在这里您需要查看您的逻辑,因为根据您当前的代码,您应该在日志中看到第二次调用的结果


推荐阅读