Angular 中什么是可观察、观察者和订阅?

问题描述 投票:0回答:5

我正在学习 Angular,我对这些 observable、observer 和 subscribe 感到困惑 事物。所以请解释一下。

angular rxjs angular6 rxjs5
5个回答
115
投票

这是一个简单的视觉效果,可以看出差异:

enter image description here

如上所示... Observable 是事件或数据流。它们通常从 Angular 方法返回,例如

http.get
myinputBox.valueChanges

订阅“启动”可观察流。如果没有订阅(或异步管道),流将不会开始发出值。这类似于订阅报纸或杂志......在订阅之前您不会开始获得它们。

订阅方法接受一个观察者。观察者有三种方法:

  • 每次从可观察对象发出一个项目时进行处理的方法。

  • 发生错误时的处理方法。

  • 观察者完成时清理任何内容的方法。在使用 Angular 的可观察量时很少使用最后一个。

(我同意......试图透过文档的树木看到森林是一个相当大的挑战。我知道他们正在努力改进它们。)


31
投票

尝试用一个非常简单的例子来解释:-

  1. Observable 就像其他人的 YouTube 频道。 ((它会不时上传新视频(数据),所以它是你的数据源))

  2. 您的 YouTube 帐户是一个 Observer

  3. 您的 YouTube 帐户 (Observer) 只能收到有关其他人的 YouTube 频道 (Observable) 是否上传了新视频 (有新数据) 或进行直播 (新事件) 的通知,前提是您已订阅该频道

(观察者订阅Observable来监听新数据/任何事件)

其中observable是一个数据源,subscribe就像一个方法/函数,Observer一般就在你身边


4
投票

Observable 可以被认为是各种数据源(例如:(userInputs)事件、HttpRequests 等)。

在这里创建我们的自定义可观察对象。

    var observable = Observable.create((observer: any)=>{
       observer.next("Hii")
       observer.next("how are you")
       observer.complete()
    observer.next("This will not send to observer")
});
  • next() 用于向观察者发送值
  • complete() 表示通知 observable 完成。

观察者基本上就是订阅 Observable 的人。

observable.subscribe(
    (data: any) => console.log(data), // for handling data
    (error: any) => console.log(error), // for handling error
    () => console.log('completed'); // for handling completion

);

在这里您可以了解更多关于Observable的信息 http://reactivex.io/documentation/observable.html


2
投票

以下是一些要点:

1) 定义:“Observable 和 Observer”是一种从发布者到订阅者传递消息的模式。
2) 功能流程:

  • Observable 已创建

  • 观察者订阅 Observable

  • Observable 可以向观察者传递消息
  • 每次,当可观察者传递一条非消息时,观察者会收到消息

3)Observable和Observer的实时使用

  • 收到AJAX响应时
  • 在客户端(浏览器)执行大型任务时

0
投票

将 Observable 视为事件或对象流。

观察者是监视它所监视的 Observable 上要更新的 .next 值的东西。这个watch是通过.subscribe(订阅Observable)启动的

一旦观察者(观察者)从 Observable 接收到新值,它就可以使用其函数处理它: .next()、.error() 或 .complete()。这三个 Observer 回调函数对应 Observable 可以发出的三个事件。

© www.soinside.com 2019 - 2024. All rights reserved.