angular - 我有不止一次的 api 调用,但只想在 Angular 6 中触发一次 ajax
问题描述
我有一个添加了动态小部件的仪表板,如果用户添加了两个具有相同 api 调用的小部件,它显然会命中两个 ajax 调用。我如何确保,如果 API 被调用一次,第二次调用会得到第一次调用的结果
解决方案
您可以使用shareReplay
运算符。它正在缓存结果并将它们发送给新的订阅者,而无需再次创建流。
import { ajax } from 'rxjs/ajax';
import { tap, map, shareReplay } from 'rxjs/operators';
const endpoint = 'https://api.github.com/users?per_page=1'
const obs$ = ajax.getJSON(endpoint).pipe(
tap(() => console.log('Making BE call')),
shareReplay(1)
);
obs$.subscribe(x => console.log('[1]', x));
obs$.subscribe(x => console.log('[2]', x));
// Output:
// Making BE call
// [1] object
// [2] object
你可以看看这个小演示:https ://stackblitz.com/edit/rxjs-eyk9y5
推荐阅读
- react-native - 换行时如何设置文本样式以不中断单词?
- python - 没有 SQLAlchemy 的 Flask 中的数据库迁移
- html - 移动设备上的 Bootstrap 4 sidenav 不在左侧
- angular - 如何在异步数据上绑定 Reactive FormArray?
- c# - C# 多维数组到 DataTable
- hyperledger-fabric - 调用链码时出现背书错误
- java - 在 Java 中使用反射检索创建对象时声明的 TYPE_USE 注释
- ios - 显示所有没有缩放线图的轴线
- ios - PromiseKit 是否有 RxSwift Zip 替代方案?
- python - python 如何在一个文件夹中导入多个 .txt 文件以向每个 .txt 文件添加字符?