angular - 合并一个 Observable 和 Promise 到一个对象
问题描述
如何合并来自 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;
}
解决方案
使用更高阶的 observable:
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)));
}),
);
}
这可能会在尝试使用 async / await 时有所突破,它与 observables 不能很好地混合。如果它仍然损坏,请删除 async / await 东西并返回承诺。
推荐阅读
- machine-learning - 如何减少大型随机森林模型 (sklearn) 的内存占用?
- spring-boot - void方法中的Spring Reactive
- xamarin.forms - Prism 版本 7 发行说明 (Xamarin.Forms)
- python - 如何使用 Django-Rest-Framework 返回单个对象
- android - 如果返回的 JSON 变量有 @ 符号,如何在 Android 中定义变量?
- java - 如何从字符串中获取类类型
- php - 如何按旧日期获取多个表的行(逐行)
- angular - matSelect - matOption:调整显示的选项数量(默认显示 6 个选项)
- asp.net - 我如何从另一个 aspx 页面中调用一个 aspx 页面而不等待它完成?
- fusion360 - 在 Audodesk Fusion 360 中挤出 thingiverse .stl 文件不起作用