什么是 angular 中的 observable、observer 和 subscribe?

Posted

技术标签:

【中文标题】什么是 angular 中的 observable、observer 和 subscribe?【英文标题】:What is observable, observer and subscribe in angular? 【发布时间】:2019-01-02 08:56:26 【问题描述】:

我正在学习 Angular,我对这些可观察的、观察者和订阅感到困惑 事物。所以请解释一下。

【问题讨论】:

【参考方案1】:

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

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

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

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

每次从 observable 发出项目时处理的方法。

处理发生的任何错误的方法。

当观察者完成时清理任何东西的方法。最后一个在处理 Angular 的 observable 时很少使用。

希望这会有所帮助。

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

【讨论】:

很好的解释【参考方案2】:

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

    Observable 就像其他人的 youtube 频道。 ((它会不时上传新的视频(数据),因此它是您的数据源))

    您的 youtube 帐户是观察者

    您的 youtube 帐户(观察者) 只能收到有关其他人的 youtube 频道 (可观察) 是否上传了新视频(有新数据)的通知 或仅在您订阅该频道

    的情况下进行直播(新活动)

(Observer 订阅 Observable 以监听新数据/任何事件)

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

【讨论】:

【参考方案3】:

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

在这里创建我们的自定义 observable。

    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 完成。

Observer 基本上是订阅 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

【讨论】:

【参考方案4】:

这里有一些要点:

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

Observable 已创建

观察者订阅 Observable

Observable 可以将消息传递给观察者 每次,当 observable 传递一个 not 消息时,Observer 都会收到它

3) Observable 和 Observer 的实时使用

接收来自 AJAX 的响应时 在客户端(浏览器)中执行大型任务时

【讨论】:

以上是关于什么是 angular 中的 observable、observer 和 subscribe?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - Twitter 搜索 api - 预检时仅应用程序的身份验证错误 400

如何使用 Backand 和 Angular 2 连接到 Facebook/Twitter/Google?

Angular-ui select2 在将 Angular 与 twitter-bootstrap 混合时不起作用

Angular/Node 验证用户

使用 Angular JS 的离线 Web 应用程序,Twitter Bootstrap

如何在 webapp 或 yo angular 上更新和包含 Twitter Bootstrap 3?