javascript - 从两个 observable 访问数据,无需多个订阅
问题描述
我的第一个 observable 发出关于我的用户的数据(来自 Firebase)。在发出此数据时,我想触发对 Firebase 的第二次调用,从不同的集合中检索各种额外的用户信息。
我可以很好地单独管理这两个操作,但显然后一个调用应该只在第一个调用成功后才真正发生。我想这与此有关,mergeMap
但我不知道该怎么做。应该向关闭/拒绝投票者指出,尽管我尝试过,但没有找到类似的问题,这些问题既能得到回答,又能以我可以完全匹配我无法理解的方式提出解决方案。
this._auth.userState$
.mergeMap(user => this._userMetaData.getData(user.uid))
.subscribe(data => {
console.log(data);
});
这是我最初的努力。我希望 console.log 会(以某种方式)返回两个调用的数据。相反,它只记录一个空数组。
谁能在这里指出我正确的方向?
解决方案
我看到 2 个不同的点值得强调。
1)在提交中,您要访问 2 个调用返回的数据:
这可以通过以下方式完成
.mergeMap(user =>
this._userMetaData.getData(user.uid)
.map(data => ({user, data})
)
在这里,您基本上通过 last 创建了map
一个 return,它是一个引用第一次调用返回的用户和第二次调用返回的数据的对象
2) 在日志中,您会看到一个空数组:
在这里您需要查看您的逻辑,因为根据您当前的代码,您应该在日志中看到第二次调用的结果
推荐阅读
- angular - 使用 .find 方法在角度中使用 jest 对数组进行单元测试
- flutter - Flutter 自动打印任何 http 请求 - 抽象 HTTP 类
- python - 在 scipy 的牛顿函数中输入一个数组作为初始猜测
- arrays - Vue v-for:使用事件处理程序(@change)从数组动态填充 HTML 到组件模板中
- django - 为什么我的 ViewSet 在使用 get_object_or_404 使用 for loop ang 后继续循环?
- python - 将类或函数导入“unittest”测试模块的最佳实践是什么
- android - 像whatsapp一样开发实时应用程序的问题
- python-3.x - 如何为文件配置的 python 记录器设置新文件名?
- c# - CS0006:CSC(0,0):找不到元数据文件“C:\Windows\system32\config\systemprofile\.nuget\packages\...”
- episerver - 用户无法在 Episerver CMS 中选择 SVG(支持其他图像类型)