我正在尝试使用多个函数的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.
}
步骤:
我假设我需要使用concatMap
和mergeMap
(或者也许是forkJoin
)。但同样,我似乎无法使用在线文档和示例来弄清楚语法。
答案 0 :(得分:1)
看起来像这样。
您将Map切换为需要从第一个输入的那些的forkJoin。然后使用内部地图来组合所有3个结果。
saveAll(): Observable<Contact> {
return this.saveContactDetails().pipe(
switchMap(contactDetails => forkJoin([
this.savePhones(contactDetails.id), // however you get the id
this.saveEmails(contactDetails.id)
]).pipe(
map(([phones, emails]) =>
Object.assign(contactDetails, {phones, emails})) // whatever your transform is
)
)
);
}