【发布时间】:2019-09-02 03:01:21
【问题描述】:
我正在尝试从多个函数中使用 Observables 的结果。有些需要按顺序运行,有些则不需要。另外,第一个的结果需要传递给一些嵌套的。
我查看了多个示例。但是,我似乎无法弄清楚这种特殊的组合。语法只是让我感到困惑。
假设您有以下函数,每个函数都返回一个 Observable。
saveContactDetails(): Observable<ContactDetails> {
// Returns single observable with single ContactDetails.
}
savePhones(contactId: string): Observable<Phone[]> {
// Returns single observable with array of Phones.
}
saveEmails(contactId: string): Observable<Email[]> {
// Returns single observable with array of Emails.
}
saveAll(): Observable<Contact> {
// TODO: Can't figure out the login/syntax here.
}
步骤:
- 调用 saveContactDetails()。只有在这完成后,才能继续。
- 使用 saveContactDetails() 的结果,调用 savePhones() 和 saveEmails()。这两个函数(可能还有更多函数)可以不按特定顺序并行运行。
- 所有“子”Observable 完成后,将所有(父级和子级)的结果合并到一个 Observable 中以从 saveAll() 返回。
我假设我需要使用concatMap 和mergeMap(或者可能是forkJoin)。但同样,我似乎无法使用在线文档和示例弄清楚语法。
【问题讨论】:
-
所有这些都必须是可观察的有什么原因吗?其中一些是否可以改为承诺?
-
@chrismclarke 每个函数都使用 http.post 进行单独的 API 调用。然后映射。所以,在某个地方,我需要处理这些人的反应。我很容易返回 http.post(stuff).map(stuff)。
-
您可以使用
.toObservable()将这些 http 帖子转换为 observables。然后,您可以使用 async/await 更轻松地管理等待操作完成。在我看来,这比处理大量订阅和合并要简单得多
标签: angular typescript rxjs