Rxjs 可观察对象:第一个操作符与其他操作符的行为如何?
我一直在寻找答案,但没有找到任何结论。 当我首先对Rxjs 可观察对象:第一个操作符与其他操作符的行为如何?,rxjs,observable,angular2-observables,Rxjs,Observable,Angular2 Observables,我一直在寻找答案,但没有找到任何结论。 当我首先对可观察的对象使用操作符,然后像swtichMap或map那样在其上使用其他操作符时会发生什么 据我所知,当我先使用然后订阅时,它将一直处于活动状态,直到返回第一个值: myObs.first().subscribe(console.log); // I shouldn't be worried about unsiscribe myObs.pipe(first()).subscibe(console.log); // The same here
可观察的对象使用操作符,然后像swtichMap
或map
那样在其上使用其他操作符时会发生什么
据我所知,当我先使用然后订阅时,它将一直处于活动状态,直到返回第一个值:
myObs.first().subscribe(console.log);
// I shouldn't be worried about unsiscribe
myObs.pipe(first()).subscibe(console.log);
// The same here
但是当我使用管道传输其他函数时会发生什么,我将把问题分为两点,首先,当我使用简单运算符(不返回其他可观察的运算符)时会发生什么:
我认为会发生什么:
- (1) 和(2)是相同的,如果我们不取消订阅,订阅将永远有效,但它只会发出一个值。内部订阅将结束,但外部订阅不会结束
- (3) 与(1,2)相反,内部订阅将永远有效,外部订阅将在第一次发出值后结束。有内部订阅吗?还是我错了
最后,使用switchMap()
会有什么变化吗?如果我们使用switchMap()
而不是flatMap()
,它将以每个新值结束内部订阅,但是上面的问题会发生什么呢
编辑:我们是否应该使用first()
作为管道的开始,并最终确保订阅结束
// 3. Has these any sense?
myObs.pipe(frist(), map(data => return data.content), first()).subscribe(console.log);
如果在first()之后使用switchMap
、concatMap
或mergeMap
(flatMap
),可能会导致多个事件,具体取决于您的代码,因此请检查代码是否生成事件。常规map
不能导致新事件
// this stream emits event every second.
stream$.pipe(
first(),
mergeMap(() => interval(1000)
);
无需在开始和结束时将放在第一位
。如果您知道流中没有流,请将其放在开始位置(不要像调用操作符一样调用mergeMap
)。在其他情况下,将放在第一位
放在末尾。我看起来像是想使用flatMap
而不是map()
我知道的所有使用map
的地方,我不会得到任何新事件,但我想问的是自动取消订阅。假设我的流总是只返回一个值,那么点2
订阅会在第一次发出值后完成吗?我想不会的t@Gonzo,我相信,如果2
,您不需要取消订阅。这是一篇很受欢迎的关于这个的帖子
// this stream emits event every second.
stream$.pipe(
first(),
mergeMap(() => interval(1000)
);