理解观察者和订阅者angular2
understanding observers and subscibers angular2
长期潜伏者 - 第一次 poster。
这是很多理论,所以请耐心等待。
我正在努力对可观察对象、观察者和订阅者(rxjs 和 angular2)的想法进行心理建模,并希望确保我走在正确的轨道上。
我目前将 observables 理解为 "streams of events that can be watched and acted upon"。数组和请求可以转换为可观察对象,以便观察者可以订阅它们,并且在触发事件时可以对该事件或可观察对象中的数据进行操作。
我看到订阅者是一种观察者,它可以使用 3 个可能的处理程序观察可观察对象:onNext、onComplete 和 onError。
我知道这些可以分开 类 只要订阅者可以访问要订阅的 observable。
如果描述准确,请告诉我。
如果这是真的,我很好奇如何使数组可观察,如下所示:
当新项目添加到数组时,我如何订阅该事件并对其采取行动?
我已经尝试通过创建一个数组来解决这个问题,用鼠标事件填充它并尝试将这个数组转换为 Observable。
这失败了,但我能够创建一个可观察的主题,使用 next() 推送新项目并使用订阅者订阅那些下一个事件(我不知道它是什么类型,所以我就离开了它没有类型化,因为我无法让编译器接受我输入的任何内容。
我的问题是:
1) 我以上对 observable & observer/subscriber 的理解是否正确?
2) 我可以创建一个标准数组,使其可观察并监听 'added' 或 'modified' 事件吗?
3) 我上面提到的用户类型是什么?
this.mouseLocationSubscriber = this.mLocs$.subscribe(
X => this.handleNext(X),
err => this.handleSubscriberError(err),
() => console.log('subscriber recd complete')
);
请:
如果这个post放错了地方,帮我把它放对地方
如果此 post 格式不正确,请帮助我了解如何格式化它以便找到答案的最佳可能性
如果这个 post 是某个类似的失落代码理论家的骗局,帮我找到那个回应
如果还有什么值得围观的,我给你准备了干草叉:----E
1) Is my above understanding of observable & observer/subscriber correct?
您走在正确的轨道上,我认为该定义没有任何错误。也许我只想改变的是,我将 observer/subscribers 合并为一个实体,因为它们完全相同。
此外,请记住 Observables 采用函数式编程方法:创建流时,在观察者对其调用 .subscribe()
之前不会执行任何操作。
人们经常混淆的另一件事是 onError
的使用。当流产生 onError
时,意味着发生了不可恢复的崩溃:流被关闭并且 onNext
不会再次被调用。当人们想要得到某种软错误时,他们所做的就是调整 Observable 类型以包含它,例如 isSuccesfull:boolean
或 errors:Error[]
2) can I create a standard array, make it observable and listen to 'added' or 'modified' events?
不... Observables 不能变魔术。从 Rx.Observable
你得到了一些辅助方法来将数组转换为可观察序列,但它们不是可观察数组。想一想你可以观察到你可以用 Rx.Observable.create
做的任何事情,例如,Rx.Observable.fromArray
的可能实现可能是:
function observableFromArray(array){
return Rx.Observable.create((observer) => {
array.forEach((elm) => {
observer.onNext(elm);
});
observer.onCompleted();
});
}
但是如您所见,当一个项目被压入数组时,没有办法通知观察者。
可以用来做这样的事情的东西是 Proxies,它允许你拦截在 object/array 中完成的操作......这有点前卫,所以不要太专家在 IE 中得到了很多支持。
我认为你最好的选择是通过 Subjects
,如你所说。您可以创建您的自定义 "ObservableArray"(或尝试谷歌搜索,也许有人已经这样做了)观察者可以订阅它,生产者可以 push/delete 值。
3) what is the type of the subscriber that I mention above?
类型始终保留。如果你有一个 Observable<MouseEvent>
,观察者将是 Observer<MouseEvent>
类型。将其视为发出 MouseEvents 的 Observable 和接受 MouseEvents 的观察者。
长期潜伏者 - 第一次 poster。 这是很多理论,所以请耐心等待。
我正在努力对可观察对象、观察者和订阅者(rxjs 和 angular2)的想法进行心理建模,并希望确保我走在正确的轨道上。
我目前将 observables 理解为 "streams of events that can be watched and acted upon"。数组和请求可以转换为可观察对象,以便观察者可以订阅它们,并且在触发事件时可以对该事件或可观察对象中的数据进行操作。
我看到订阅者是一种观察者,它可以使用 3 个可能的处理程序观察可观察对象:onNext、onComplete 和 onError。
我知道这些可以分开 类 只要订阅者可以访问要订阅的 observable。
如果描述准确,请告诉我。
如果这是真的,我很好奇如何使数组可观察,如下所示: 当新项目添加到数组时,我如何订阅该事件并对其采取行动?
我已经尝试通过创建一个数组来解决这个问题,用鼠标事件填充它并尝试将这个数组转换为 Observable。
这失败了,但我能够创建一个可观察的主题,使用 next() 推送新项目并使用订阅者订阅那些下一个事件(我不知道它是什么类型,所以我就离开了它没有类型化,因为我无法让编译器接受我输入的任何内容。
我的问题是:
1) 我以上对 observable & observer/subscriber 的理解是否正确?
2) 我可以创建一个标准数组,使其可观察并监听 'added' 或 'modified' 事件吗?
3) 我上面提到的用户类型是什么?
this.mouseLocationSubscriber = this.mLocs$.subscribe(
X => this.handleNext(X),
err => this.handleSubscriberError(err),
() => console.log('subscriber recd complete')
);
请:
如果这个post放错了地方,帮我把它放对地方
如果此 post 格式不正确,请帮助我了解如何格式化它以便找到答案的最佳可能性
如果这个 post 是某个类似的失落代码理论家的骗局,帮我找到那个回应
如果还有什么值得围观的,我给你准备了干草叉:----E
1) Is my above understanding of observable & observer/subscriber correct?
您走在正确的轨道上,我认为该定义没有任何错误。也许我只想改变的是,我将 observer/subscribers 合并为一个实体,因为它们完全相同。
此外,请记住 Observables 采用函数式编程方法:创建流时,在观察者对其调用 .subscribe()
之前不会执行任何操作。
人们经常混淆的另一件事是 onError
的使用。当流产生 onError
时,意味着发生了不可恢复的崩溃:流被关闭并且 onNext
不会再次被调用。当人们想要得到某种软错误时,他们所做的就是调整 Observable 类型以包含它,例如 isSuccesfull:boolean
或 errors:Error[]
2) can I create a standard array, make it observable and listen to 'added' or 'modified' events?
不... Observables 不能变魔术。从 Rx.Observable
你得到了一些辅助方法来将数组转换为可观察序列,但它们不是可观察数组。想一想你可以观察到你可以用 Rx.Observable.create
做的任何事情,例如,Rx.Observable.fromArray
的可能实现可能是:
function observableFromArray(array){
return Rx.Observable.create((observer) => {
array.forEach((elm) => {
observer.onNext(elm);
});
observer.onCompleted();
});
}
但是如您所见,当一个项目被压入数组时,没有办法通知观察者。
可以用来做这样的事情的东西是 Proxies,它允许你拦截在 object/array 中完成的操作......这有点前卫,所以不要太专家在 IE 中得到了很多支持。
我认为你最好的选择是通过 Subjects
,如你所说。您可以创建您的自定义 "ObservableArray"(或尝试谷歌搜索,也许有人已经这样做了)观察者可以订阅它,生产者可以 push/delete 值。
3) what is the type of the subscriber that I mention above?
类型始终保留。如果你有一个 Observable<MouseEvent>
,观察者将是 Observer<MouseEvent>
类型。将其视为发出 MouseEvents 的 Observable 和接受 MouseEvents 的观察者。