Javascript RxJS-Observable在第一次调用时未使用.next()发出值
我在RxJS上有些挣扎。我有3个可观察的物体。第一个Observable在单击文档时发出一个值,并立即完成(有意)。第二个Observable侦听第一个$Observable并映射这些值。最后,第三个Observable与第二个$Observable合并,最后一个元素由第一个$发出 通过查看代码更容易理解:Javascript RxJS-Observable在第一次调用时未使用.next()发出值,javascript,rxjs,observable,Javascript,Rxjs,Observable,我在RxJS上有些挣扎。我有3个可观察的物体。第一个Observable在单击文档时发出一个值,并立即完成(有意)。第二个Observable侦听第一个$Observable并映射这些值。最后,第三个Observable与第二个$Observable合并,最后一个元素由第一个$发出 通过查看代码更容易理解: const somethingHappened = true; const first$ = Observable.create(observer => { document.a
const somethingHappened = true;
const first$ = Observable.create(observer => {
document.addEventListener('click', e => {
console.log('document clicked!')
if (somethingHappened) {
observer.next(5)
observer.complete()
} else {
observer.next(5)
}
})
})
const second$ = first$.pipe(
map((a: number) => a * 10),
)
const third$ = second$.pipe(
concat(first$.pipe(last(), map(element => console.log('last element:', element)))),
)
third$.subscribe()
演示:(单击文档并查看控制台)
事实上,正在发生的事情真的很有趣。在第一次单击文档之后,我希望第三个$observable可以完成,因此,console.log('last element:',element)
应该启动。相反,只有console.log('documentclicked!')
触发
下一次单击文档后,console.log('document clicked!')
激发两次,console.log('last element:',element)
激发一次
有人能给我解释一下那里发生了什么事吗
在第一次单击文档后,我希望第三次$observable能够完成
为了完成第三个$,第二个$和concat()
的所有参数都需要完成。concat()
的参数:
是一个全新的Observable,只有在第二次$
完成后才能订阅——因此您的文档上安装了第二个单击处理程序
如果向可观察函数添加一些日志输出:
const first$ = Observable.create(observer => {
console.log('subscribed', Date.now()); // Add this
document.addEventListener('click', e => {
...
您将看到两条日志“已订阅”消息。当页面加载时(在调用third.subscribe()
之后)和第一次单击文档后(当concat()
订阅其参数时)再次调用
const first$ = Observable.create(observer => {
console.log('subscribed', Date.now()); // Add this
document.addEventListener('click', e => {
...