javascript - RxJS:Forkjoin 类实例属性
问题描述
据我所知,forkJoin
如果给定一个类实例,RxJS 附带的当前运算符会失败,因为函数不是 Observables。
我自己编写了一个 forkJoin 的替代版本,Object.keys(instance)
用于确定此类实例的哪些部分必须被分叉连接。
虽然这工作得很好,但我想知道是否没有任何方法可以使用原生 RxJS 运算符实现相同的结果?
编辑: 按照建议,我将在下面发布我的源代码。
export function forkJoinProperties<ObjectLike extends object>(object: ObjectLike) : Observable<ObjectLike> | null
{
// Check validity
if(!UTIL.isObject(object))
{
console.error(`@UTIL.forkJoinProperties(): Given parameter ${object} is not an object!`);
return null;
}
const propertyKeys: string[] = Object.keys(object);
const resolvedPropertyValues: any[] = new Array(propertyKeys.length).fill(undefined);
let resolvedPropertiesCount: number = 0;
return new Observable(subscriber =>
{
for(let i = 0; i < propertyKeys.length; ++i)
{
const propertyObservable: Observable<any> = from(object[propertyKeys[i]]);
subscriber.add(propertyObservable.subscribe(
{
next: value => resolvedPropertyValues[i] = value,
error: error => subscriber.error(error),
complete: () =>
{
// Check if this is the last property to resolve it's observable
if(++resolvedPropertiesCount == propertyKeys.length)
{
// Save resolved property values to corresponding keys
for(let n = 0; n < propertyKeys.length; ++n)
object[propertyKeys[n]] = resolvedPropertyValues[n];
// Return object with resolved properties
subscriber.next(object);
subscriber.complete();
}
}
}));
}
});
}
解决方案
推荐阅读
- ios - 如何使用 QRCode 从 Microsoft 公司门户/Intune 应用程序下载应用程序
- excel - “ALL”- BY 选项(SAS PROC TABULATE)
- javascript - 滚动标题
- azure-devops - 可以自定义 Azure DevOps 项目吗?
- reactjs - 当 Chrome 开发工具打开时,样式化组件内的图像重新渲染
- c - C - 相当于 Lua 的 math.rad
- python - Python中的二进制搜索无法正常工作,仅显示列表中的某些项目
- node.js - X-Powered-By:微服务中的头盔
- java - 为什么这个 for 循环会遇到 ArrayIndexOtOfBounds 错误?(爪哇)
- vue.js - 是否有用于谷歌地图的 npm 包,其中包含动态更改地图上每个标记的颜色的选项?