当前位置: 首页 > 知识库问答 >
问题:

RxJS的观察者和订阅者是同一件事吗?

赵镜
2023-03-14

从这个留档:

RxJS为JavaScript引入了一个新的Push系统。可观察对象是多个值的生产者,将它们“推送”给观察者(消费者)。

订阅可观察对象类似于调用函数。

要调用可观察对象,我们应该从可观察对象本身调用subscribe()函数,并将观察者作为可观察对象提供的数据的使用者传递,如:

observable.subscribe( { /*this is an observer*/ } );

本文件还说明:

什么是观察者?观察者是被观察者所传递价值的消费者。观察者只是一组回调,每个回调对应于被观察者发送的每种类型的通知:next、error和complete。以下是典型观察者对象的示例:

另一方面,第一份文件说:

可观察构造函数接受一个参数:订阅函数。下面的示例创建一个可观察的,每秒向订阅者发出字符串hi。

import { Observable } from 'rxjs';

const observable = new Observable(function subscribe(subscriber) {
  const id = setInterval(() => {
    subscriber.next('hi')
  }, 1000);
});

当调用可观察时。使用观察者订阅,函数subscribe in new Observable(函数subscribe(subscriber){…})为给定的订阅服务器运行。每个调用都是可观察的。subscribe为给定订阅者触发其自己的独立设置。

那么实体Subscriber只是在创建新的可观察对象时传递给subscribe函数的参数?如果不是,谁是订户?

观察员和订阅者是同一实体吗?如本文件所述

为什么调用的代码不可见。订阅({observer as callbacks})可观察对象的订阅方?与函数返回值的使用者一样,进行函数调用的代码也是如此。

共有1个答案

韩欣怿
2023-03-14
const observer = {
  next: v => /* code for next callback*/,
  error: err => /* code for error callback*/,
  complete: () => /* code for completion callback*/
}
const subscription = {
  unsubscribe: () => /* code for unsubscribe callback */
}
const observable1 = from([1,2,3,4,5]);
const observable2 = of(1,2,3,4,5);
const observable3 = new Observable(observer => {
  observer.next(1);
  observer.next(2);
  observer.next(3);
  observer.next(4);
  observer.next(5);
  observable.complete();

  return { // return a subscription
    unsubscribe: () => /* code for unsubscribe callback */
  };
});
// Store a subscription 
const subscription = observable3.subscribe(observer);
// Invoke the unsubscribe callback defined by the observable.
subscription.unsubscribe();

[Subscriber]实现Observer接口并扩展订阅类。虽然Observer是用于消费可观察值的公共API,但所有观察者都会转换为订阅者。。。Subscriber是RxJS中的一种常见类型,对于实现操作符至关重要,但它很少用作公共API。

观察员和订阅者是一回事吗?有点,是吗?这取决于你问问题的具体程度。

考虑一下:

observable3.subscribe({
  next: v => /* code for next callback */
});

obsevable3.subscribe(
  v => /* code for next callback */
);

第一个是仅定义了一个observer属性的对象。第二个是简单的lambda函数。它们最终生成的用户基本相同。

 类似资料:
  • 我正在尝试破译以下函数: null

  • 我正在学习RxJS,对于“听众”在哪里(在可观察的或观察者中),他们是如何订阅/取消订阅的,以及当观察者“不再对”可观察的“不感兴趣”时会发生什么,比如当你使用或。 对于第一部分——什么是订阅什么,什么是倾听者——我对这些陈述之间看似矛盾的地方感到困惑。从http://reactivex.io/rxjs/manual/overview.html我们读到观察者不是观察者的“听众” 这与addEven

  • 我有这个问题,我一直在寻找,但找不到解决方案(或者也许我不能根据其他答案做出解决方案)。 我的问题是,我需要找到一种方法来等待可观察的(有自己的订户)并等待另一个可观察的(有自己的订户)完成。 场景是这样的: 奥布1- 奥布斯2 - 我主要担心的是我需要两个订阅者。在我看来,obs1 和 obs2 并行运行,但需要检查 obs1 是否以新的会话令牌完成。也许这不是RxJava的主要目的。 Obs1

  • 问题内容: 我试图破译以下功能: 我从http://blog.danlew.net/2014/09/15/grokking-rxjava- part-1/ 获得了一个很好的rxjava简介,但是它只是顺便提到了Observer,说您将在大多数情况下使用Subscriber从Observable发射到消费项目的时间。 有人可以向我解释 什么是观察者? 观察者与订户有何不同? 上面的代码段是做什么的?

  • 我通读了RxJS文档,并希望确保我理解了< code > subscriber . unsubscribe()和< code > subscriber . complete()之间的区别。 假设我有一个有两个订阅者的可观察对象,订阅者1和订阅者2。如果订阅者1对其订阅调用取消订阅,它将不再接收来自可观察对象的通知,但订阅者2将继续接收它们。 <代码>的文档。complete(): 观察者回调,用于

  • 这只是为了澄清发布/订阅线程。 我的疑问是在正常的发布者/订阅者模式中,订阅者和发布者是在同一个线程上运行还是在不同的线程中运行? 还是取决于实现? 到目前为止,我所想的是不同的订阅会有自己的线程,而publisher在其上运行的是自己的线程?