如何合并来自Observables的两个函数返回(一个返回一个Promise,一个返回一个对象)? 如何链接结果?正确的方法是什么?
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;
}
答案 0 :(得分: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。