Javascript RxJS:Forkjoin类实例属性

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

据我所知,RxJS附带的当前
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替代版本的代码,以获得改进建议。