如何合并来自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;
}
使用可观察的更高阶:
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。