我已经创建了一个带有子观察项的父观察项。当子观察项完成时,父观察项也完成了。
有没有一种更好的方法可以做到这一点,而不必使用subscripe()
两次。
代码:
const parentObservable = new Observable((observer) => {
if (condition) {
observer.complete();
return;
}
this.childObservable().subscribe(() => observer.complete());
});
parentObservable.subscribe();
- EDIT:**我们希望能够在满足条件时不订阅子项
3条答案
按热度按时间vjrehmav1#
合并操作符允许您将多个观察对象合并为单个观察对象。您可以使用此操作符合并父观察对象和子观察对象。
如果希望在子观察项完成时完成父观察项,可以改用concat运算符。concat运算符将从第一个观察项发出值,然后在第一个观察项完成后从第二个观察项发出值。
这将在子观察项完成时完成父观察项。
merge操作符将所有可观察值合并到一个流中,并在它们到来时发出值。
concat运算符连接可观察对象,并仅在第一个可观察对象完成后才发出值。
qco9c6ql2#
根据你的描述
当子观察项完成时,它将完成父观察项。
我相信您可以使用
takeUntil
。每当
childObservable
发出一个值时,管道将完成,并且parentObservable
的拆卸逻辑(如果有)将运行。dgtucam13#
你例子中的
new Observable
构造函数从来不输出任何值,所以它将是一个非常无用的可观察对象,你可以直接删除它,不用担心完成一个无用的可观察对象。考虑到这一点,您的示例代码可以如下重写:
这是对
childObservable
的有条件订阅。这可以进一步简化为:
或: