javascript - 当方法可能异步获取数据时使用哪种 RxJS 类型?
问题描述
假设我们有以下工厂:
@Injectable()
export class DataClassFactory {
constructor(
private dataService: DataService,
) { }
public createThing(initialData?: InitialData): AsyncSubject<DataClass> {
let dataClass: AsyncSubject<DataClass> = new AsyncSubject<DataClass>();
if (!!initialData) {
dataClass.next(new DataClass(initialData));
dataClass.complete();
} else {
this.dataService.getData().subscribe((dataResponse) => {
dataClass.next(new ReportRequest(dataResponse));
dataClass.complete();
});
}
}
return dataClass;
}
}
我们注入这个工厂,调用 createThing 方法,并订阅某个组件中的响应。我最初尝试使用普通的主题,但后来我意识到在我们已经有初始数据的情况下,在返回响应之前调用 next(),因此组件中的订阅者永远不会获得该值。
我的问题是:这是使用 AsyncSubject 的正确情况,还是有不同/更好的方法来处理这种具有潜在同步和异步时间线的方法?
解决方案
我会按照这些思路做一些事情
public createThing(initialData?: InitialData): Observable<DataClass | ReportRequest> {
if (!!initialData) {
const data = new DataClass(initialData);
return of(data);
} else {
return this.dataService.getData()
.pipe(map(dataResponse => new ReportRequest(dataResponse));
}
}
调用 createThing 的人将获得一个必须订阅的 Observable。
这个 Observable 会发出一个DataClass
ifinitialData
不为 null 的实例,否则它会在响应时返回和ReportRequest
实例dataService
。
推荐阅读
- javascript - 找不到可靠的赔率解决方案
- javascript - 正则表达式 - RxJS 6 迁移管道
- python-3.x - 如何在python3中使用pickle序列化对象
- vb.net - 即使文件不可用,从文件路径获取默认图标
- ruby - 在没有 require_relative 的情况下测试我的 ruby 模块本地更改
- java - Java JCache 字符串键与复合键
- ruby - 使用rails Axlsx合并多行的多个单元格
- r - 将数据框列中的某些值移动到 R 中的下一列
- excel - 从 Excel 组合框中删除重复项
- date - Ext.Date.format 格式错误