将可观察到的并承诺对一个对象

问题描述 投票:0回答:1

如何合并来自Observables的两个函数返回(一个返回一个诺言,一个返回一个对象)?如何链接结果?正确的方法是什么?

functionReturnObservable(
        element: SomeInterface,
    ): Observable<Interface> {
        return this.someService.fn2ReturnObservable().pipe(
            map((result) => {
                // the promise function needs to merge with the funcObject
                const updatedElement= from(this.fnPromise(element))
                return this.funObject(updatedElement, result);
            }),
        );
    }

funcObject(
        updatedElement: Readonly<Interface>,
        listItems: IInterface[],
    ): IObject {
        // returns a revised Object
        return updatedObjects;
    }

async fnPromise(elements: IElements): Promise<SomeInterface> {
        // ... some other stuff 
        let result;
        result.Name = "John"
        if( elements.References) {
            await this.otherService
            .lookup(elements.References)
            .then((result) => {
                result.Secret= result;
            });
        }
        return result;
    }
angular rxjs rxjs6 rxjs-observables
1个回答
1
投票

使用可观察的更高阶:

functionReturnObservable(
    element: SomeInterface,
): Observable<Interface> {
    return this.someService.fn2ReturnObservable().pipe(
        switchMap((result) => {
            // switchMap will subscribe to inner observable, use map to combine results
            return from(this.fnPromise(element)).pipe(
              map(updatedElement => this.funObject(updatedElement, result)));
        }),
    );
}

这在尝试使用异步/等待时可能会有点中断,它不能与可观察对象很好地混合。如果仍然损坏,请删除异步/等待的内容,然后返回promise。

© www.soinside.com 2019 - 2024. All rights reserved.