javascript - Observable vs Promise,如何等待所有可观察对象完成?
问题描述
在 Node.js 中,我需要等待几个Observable
s 完成。我还需要订阅每个 observable。
我会使用Promise.all()
,但那些Observable
不是Promise
。
下面的代码是否正确?
let promise1 = observable1.toPromise()
observable1.subscribe(...)
let promise2 = observable2.toPromise()
observable2.subscribe(...)
Promise.all([promise1, promise2]).then(...)
如果不正确,如何更改?
我试过这段代码:
let courtsPromise =
this.ownedContractHandle.pastEvents({fromBlock: 0, filter: {courtId: this.courtIDs}})
.subscribe(events => this.processCourtEvents(events))
let namesPromise =
this.courtNamesContractHandle.pastEvents({fromBlock: 0, filter: {ourCourtId: this.props.courtId}})
.subscribe(events => this.processNameEvents(events))
let trustedCourtsPromise =
this.ownedContractHandle.getTrustedCourtsList(this.props.courtId)
console.log('before zip')
zip([courtsPromise, namesPromise]).subscribe(function(values) {
console.log('values', values)
this.updateCourtItems()
this.updateTokenNames()
this.updateTrustedCourts(values[2])
})
它打印'before zip'
但不是'values'
。为什么它不起作用?
你也看到了,在两个 observables 中我也有一个 promise。如何也等待它(当两个可观察对象和一个承诺都完成时)?
解决方案
你的意思是像zip这样的东西?
参考:https ://www.learnrxjs.io/learn-rxjs/operators/combination/zip
将上述链接中的示例复制到 stackblitz。希望它会有所帮助
推荐阅读
- python - Python:Microsoft Exchange 通过 EWS 批准/拒绝电子邮件(使用 exchangelib)
- c++ - 对静态重载(类)函数/方法的调用不明确
- node.js - 无法在回调中获取配置文件信息,但能够在 serializeUser 函数中找到该信息
- python - 如何为 python 函数定义 send_keys?
- tensorflow - Resnet50 图像预处理
- android - 运行项目时 Android Studio 模拟器未启动
- c++ - 我已经通过了该问题的所有测试用例,甚至通过了 Udebugg 上的所有测试用例,并且仍然获得了关于 UVA 在线法官的 WA 判决
- node.js - Twilio Outbound Call API - 如何在呼出电话接收者的语音邮件中放置记录?
- jquery - 如何将变量添加到 URL
- c# - 在不同线程上运行的两个实例交叉并复制了不应具有的数据