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

理解RxJS行为主题

胡霖
2023-03-14

我们尝试使用BehaviorSubject跨多个组件共享API数据。在我的组件上,我触发一个HTTP请求,并在返回响应后更新主题。

组件技术

onClick() {
    this.service.getCompanies();
    this.service.companiesList$.subscribe(companies => {
        console.log(companies.length); // 0 and then 1
    });
}

服务台

companiesList$ = new BehaviorSubject([]);

getCompanies() {
    return this.http.get(myUrl).subscribe((res: any) => {
        this.companiesList$.next(res.data);
    });
}

请求完成后,如何仅访问行为主体的最后发出的值?

共有3个答案

隗星驰
2023-03-14

要获得最后一个发射值,请使用:

公司列表$.getValue()

如果要在流中使用它,请使用withLatestFrom操作符

夏建木
2023-03-14

从技术上讲,您可以使用companiesList$.getValue(),但我建议不要使用subscribe(),而是使用AsyncPipe(参考)。可能是这样的:

组件技术

companies$ = this.service.companiesList$.asObservable();

onClick() {
  this.service.getCompanies();
}

component.html

<div *ngIf="companies$ | async as companies">
  <!-- your stuff -->
  {{ companies.length }}
</div>
程智明
2023-03-14

也许您可以尝试以下操作,将http请求的可观察性保存在服务中,并对其应用shareReplay(1)操作符。然后,在您的组件中,您可以按如下方式使用它:

组件技术

onClick() {
    this.service.getCompanies().subscribe(companies => {
        console.log(companies);
    });
}

服务台

$companies =  this.http.get(myUrl).pipe(shareReplay(1));

getCompanies() {
    this.companies$;
}
 类似资料:
  • 我精通RxJS,并在Reactor framework(java)方面迈出了第一步。 Reactor中行为主体的等效物是什么? 或者与RxJS相比,Reactor中使用的模式完全不同吗?对于了解RxJS的人来说,有什么好的参考资料可以学习Reactor吗?

  • 我试图将一个角度函数转换为可观察模式,因为它的当前实现与它有一些异步性。为了讨论这个问题,我们举一个简单的例子。 可以通过以下方式将其转换为使用可观察对象: 我所面临的问题(据我所知)是针对无法访问内部选择语句的情况。 如果使用常规主题,订阅函数肯定不会得到任何值,因为事件的顺序是: 函数被调用 主题已创建 值已设置 调用函数订阅,因此仅在此事件发生后获取值 如果使用了BehaviorSubjec

  • 问了这个问题后,我很困惑,于是决定为一个C编译器程序构建类似的测试。这是我的代码: 使用选项在GCC下编译 测试代码被更改,这样错误值只能在运行时知道(而不能在编译时知道),这样GCC优化器就不能删除循环的代码。 我们应该期待CPU的加速吗?(正如GCC编译程序预测的那样)

  • 问题内容: 该主题的文档稀疏,很难在此找到“入口点”。 问题答案: 语义因主题类型而异。我将它们分为两种:vanilla()和特殊用途主题(其他三种)。专用主题由于其专业性(例如,完成/重新连接行为)而具有一些共同之处,因此具有一些香草主题的部分语义。 Vanilla Rx.Subject语义 主要特点 主题实现观察者,可观察的界面(以及在原型上具有处理程序的一次性界面)。这意味着,除其他外,它们

  • RxJS reactive官网 / RxJS官网 / RxJS github / jsfiddle 弹珠图工具 在网站http://rxmarbles.com/上,可以看到主要的操作符的弹珠图. 在网站https://rxviz.com/上可以编写任意Observable对象来查看弹珠图 BOOK RxJS in Action 《深入浅出Rxjs》 Rx RxJS是结合了观察者模式,迭代器模式和函

  • ReactiveX 是一个通过使用可观察序列来合成异步和基于事件的程序的库。 它扩展了 observer 模式,以支持数据和/或事件序列,并增加了操作符,允许你声明式地将序列组合在一起,同时抽象出低级线程、同步、线程安全、并发数据结构和非阻塞 I/O 等问题。 示例代码: var $input = $('#input'),    $results = $('#results');/* Only g