javascript - RXJS6 - 从返回 Observable 的 Promise 函数返回 Observable?
问题描述
我有一个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,它也可以是一个 Promise )返回的值(和错误)。
所以我这样做了:
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
构造函数方法。
不使用可观察构造函数(包括错误处理)解决方案可以解决这个问题吗?
解决方案
为什么不直接将 包装Promise
成 an Observable
(这样您就可以使用 anObservable
可以提供的所有运算符),然后使用 a switchMap()
?
public dialogShow(): Observable<SupportingDocument> {
return from(Promise.resolve(1)).pipe(switchMap(() => this.getData()));
}
工作堆栈闪电战
推荐阅读
- sms - Android stock SMS App preview 在用户点击之前预取嵌入在文本消息中的链接?
- git - git --name-status 忽略所有空格
- r - 当函数需要多个输入时,如何将函数应用于 R 中数据帧的每一行?
- python - django-rest-registration 0.5.1 抛出 RESET_PASSWORD_VERIFICATION_URL 和 RESET_PASSWORD_VERIFICATION_URL 未设置,即使它们已设置
- python - 如何在 n 秒后停止等待用户输入数据?
- javascript - 完成 AWS 身份验证流程
- html - 如何在顶部而不是居中创建文本输入
- javascript - 为什么 alert() 工作 3 次?
- java - 我在哪里可以得到 BitmapFont,我应该把它放在哪里?
- java - 为什么 int[][] 不能转换为 int?