【发布时间】:2018-05-22 14:37:05
【问题描述】:
我有两个要组合的可观察对象,并且在订阅中使用两个参数或只使用一个参数。我尝试了 .ForkJoin、.merge、.concat 但无法实现我正在寻找的行为。
例子:
obs1: Observable<int>;
obs2: Observable<Boolean>;
save(): Observable<any> {
return obs1.concat(obs2);
}
那么当使用这个功能时:
service.save().subscribe((first, second) => {
console.log(first); // int e.g. 1000
console.log(second); // Boolean, e.g. true
});
或
service.save().subscribe((first) => {
console.log(first); // int e.g. 1000
});
有没有可能得到这种行为?
希望有人能提供帮助!
编辑:
在我的具体用例中,obs1<int> 和 obs2<bool> 是两个不同的发布请求:obs1<int> 是实际的保存功能,obs2<bool> 检查是否有其他服务正在运行。
请求完成后需要obs1<int> 的值来重新加载页面,如果服务正在运行,则需要obs2<bool> 的值来显示消息 - 独立于obs1<int>。
所以如果obs2<bool> 在obs1<int> 之前发出,这不是问题,消息会在重新加载之前显示。但是如果obs1<int> 在obs2<bool> 之前发出,则页面会重新加载并且消息可能不再显示。
我之所以这么说是因为对于给定的答案,无论值是在其他可观察对象的 onComplete 之前还是之后发出,都会有不同的行为,这可能会影响用例。
【问题讨论】:
-
你用的是什么版本的 rxjs?
-
rxjs 版本 6.1.0
-
可能有用 - 请参阅此 RxJs v6 解决方案,在订阅功能上使用 zip 和参数解构 - stackoverflow.com/a/55993246/1882064
标签: javascript angular typescript rxjs