Javascript RxJS:Forkjoin类实例属性
据我所知,RxJS附带的当前Javascript RxJS:Forkjoin类实例属性,javascript,typescript,rxjs,observable,fork-join,Javascript,Typescript,Rxjs,Observable,Fork Join,据我所知,RxJS附带的当前forkJoin操作符在给定类实例时失败,因为函数是不可观察的 我自己编写了forkJoin的另一个版本,使用Object.keys(instance)来确定这样的实例的哪些部分必须进行fork连接 虽然这工作得很好,但我想知道是否有任何方法可以用原生RxJS操作符实现相同的结果 编辑: 按照建议,我将在下面发布我的源代码 export function forkJoinProperties<ObjectLike extends object>(objec
forkJoin
操作符在给定类实例时失败,因为函数是不可观察的
我自己编写了forkJoin的另一个版本,使用Object.keys(instance)
来确定这样的实例的哪些部分必须进行fork连接
虽然这工作得很好,但我想知道是否有任何方法可以用原生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();
}
}
}));
}
});
}
导出函数属性(对象:ObjectLike):可观察| null
{
//检查有效性
如果(!UTIL.isObject(对象))
{
错误(`@UTIL.forkJoinProperties():给定参数${object}不是对象!`);
返回null;
}
const propertyKeys:string[]=Object.keys(对象);
const resolvedPropertyValues:any[]=新数组(propertyKeys.length).fill(未定义);
让ResolvedProperties计数:number=0;
返回新的可观察对象(订户=>
{
for(设i=0;iresolvedPropertyValues[i]=value,
错误:error=>subscriber.error(错误),
完成:()=>
{
//检查这是否是解析其可观察性的最后一个属性
if(++resolvedPropertiesCount==propertyKeys.length)
{
//将解析的特性值保存到相应的键
for(设n=0;n
你能解释下一票吗?不可理解问题中的问题。forkJoin
不会对对象.键(实例)
进行任何检查,因此你必须手动进行检查。您应该共享forkJoin替代版本的代码,以获得改进建议。