RxJs .first()运算符(除其他外)是否可完整观察源?

时间:2019-10-29 19:18:57

标签: rxjs

如果我有以下代码:

const subject = new BehaviorSubject<[]>([]);
const observable = subject.asObservable();
subject.next([{color: 'blue'}])
observable.pipe(first()).subscribe(v => console.log(v))

根据文档:

  

如果不带任何参数调用,则首先发出来源Observable的第一个值,然后完成。...

这是否意味着可观察到的源(在这种情况下为BehaviorSubject)完成并且您不能再使用它?因为您无法再对其调用.next([...])

我试图了解如果没有.complete()方法的可观察对象如何完成?

我正在尝试查看first()的源代码,该源代码在幕后使用take(),然后依次使用take()使用lift(),所以我很好奇第一个运算符返回可观察源(主题)的副本,并完成该操作。

1 个答案:

答案 0 :(得分:1)

可观察的源未完成,完成的是订阅。您可以在Observable源上进行多个订阅,在这种情况下,您可以使用一个BehaviorSubject。

subject.next([{color: 'blue'}])
subject.next([{color: 'red'}])
const subs1 = observable.pipe(first()).subscribe(v => console.log(v))
const subs2 = observable.subscribe(v => console.log(v))

在上面的示例中,您清楚地看到源尚未完成,仅是订阅。

如果您想尝试的话,我已经创建了Stackblitz:https://stackblitz.com/edit/rxjs-uv6h6i

希望我明白你的意思!

干杯:)