我们尝试使用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);
});
}
请求完成后,如何仅访问行为主体的最后发出的值?
要获得最后一个发射值,请使用:
公司列表$.getValue()
。
如果要在流中使用它,请使用withLatestFrom
操作符
从技术上讲,您可以使用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>
也许您可以尝试以下操作,将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