【发布时间】:2018-06-10 19:40:10
【问题描述】:
我有一个方法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() 的返回值不必是 Observable,它也可以是一个承诺)。
所以我这样做了:
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 构造方法。
不使用 observable 构造函数(包括错误处理)解决方案可以解决这个问题吗?
【问题讨论】:
-
不要使用
Observable构造函数。有内置的方法可以从和转换为 Promise,使用它们。 -
@Bergi 更改后,没有返回正确的结果...stackblitz.com/edit/…
标签: javascript rxjs es6-promise