我有一个方法getData
,它返回Observable<SupportingDocument>
(代码和返回值不能更改,因为它是外部API )。
getData(): Observable<SupportingDocument> {
return of(new SupportingDocument());
}
当用户点击按钮时,我们实际上会向他显示一个模态页面。当该模态关闭时(Promise api) - 我们应该调用getData()
并返回值:
public dialogShow(): Promise<Observable<SupportingDocument>> {
return Promise.resolve(1).then(() => { //modal was closed
return this.getData();
})
}
最后,我应该提供一个方法show()
,它应该返回从return this.getData();
返回的值(和错误)( shows()的返回值不必是一个可观察的,它也可以是一个承诺)。
所以我这样做了:
public show(): Observable<SupportingDocument> {
return new Observable<SupportingDocument>((obs) => {
this.dialogShow().then((res: Observable<SupportingDocument>) => obs.next(res), (res) => obs.error(res));
})
}
完整代码:
//user starts here
public show(): Observable<SupportingDocument> {
return new Observable<SupportingDocument>((obs) => {
this.dialogShow().then((res: Observable<SupportingDocument>) => obs.next(res), (res) => obs.error(res));
})
}
public dialogShow(): Promise<Observable<SupportingDocument>> {
return Promise.resolve(1).then(() => {
return this.getData();
})
}
getData(): Observable<SupportingDocument> {
return of(new SupportingDocument());
}
问题
我认为我过于复杂这么简单的任务。更多 - 我真的不喜欢new Observable
构造函数方法。
如果不使用可观察的构造函数(包括错误处理)解决方案,是否可以解决此问题?
答案 0 :(得分:2)
为什么不将Promise
包装到Observable
中(以便您可以使用Observable
可以提供的所有运算符),然后使用switchMap()
?
public dialogShow(): Observable<SupportingDocument> {
return from(Promise.resolve(1)).pipe(switchMap(() => this.getData()));
}