Angular - 分叉后分叉
Angular - Forkjoin after forkjoin
您好,我最近发现了 API 的 forkjoin 的强大功能,并尝试使用它来加快加载时间。正如标题所说,在 forkjoin 之后寻求 运行 forkjoin 的最佳实践帮助。
我有一个 forkjoin,它为 2 个 API 抓取一些数据。根据抓取的数据,我需要 运行 第二次 forkjoin 以获得额外的 2 个 API。
在给定 id 的第一个 forkjoin 中,我获取了表单的数据和 UX 样式数据。
const form = this.apiService.getForm(id);
const style = this.apiService.getFormStructure(id);
在第二次 forkjoin 中,我想将在表单数据中找到的 photoId 传递给 2 x APIS:
this.apiService.getPhotoUrls(photoIds)
this.apiService.getPhotoHistory(photoIds)
这是我目前的情况:
let formId: string = '1';
const form = this.apiService.getForm(id);
const style = this.apiService.getFormStructure(id);
forkJoin([form, style])
.subscribe(
(data:Object[]) => {
// handle result
let formData = data[1];
let formStyle = data[2];
let photoIds:number[] = formData.photoIds;
//***What is the best to pass the photo Ids to run the next 2 APIS??****//
}
);
非常感谢您的提前帮助!
你快到了。使用像 switchMap
这样的高阶映射运算符从一个可观察对象切换到另一个。您还可以使用解构赋值
跳过显式 formData
和 formStyle
初始化
forkJoin([form, style]).pipe(
switchMap(([formData, formStyle]) => {
let photoIds: number[] = formData['photoIds'];
return forkJoin([
this.apiService.getPhotoUrls(photoIds)
this.apiService.getPhotoHistory(photoIds)
]);
})
).subscribe({
next: ([urls, history]) => {
// `urls` - response from `apiService.getPhotoUrls(photoIds)`
// `history` - response from `apiService.getPhotoHistory(photoIds)`
},
error: (error: any) => {
// handle error
}
});
是 b/n forkJoin
运算符和 switchMap
函数的简要比较。
您好,我最近发现了 API 的 forkjoin 的强大功能,并尝试使用它来加快加载时间。正如标题所说,在 forkjoin 之后寻求 运行 forkjoin 的最佳实践帮助。
我有一个 forkjoin,它为 2 个 API 抓取一些数据。根据抓取的数据,我需要 运行 第二次 forkjoin 以获得额外的 2 个 API。
在给定 id 的第一个 forkjoin 中,我获取了表单的数据和 UX 样式数据。
const form = this.apiService.getForm(id);
const style = this.apiService.getFormStructure(id);
在第二次 forkjoin 中,我想将在表单数据中找到的 photoId 传递给 2 x APIS:
this.apiService.getPhotoUrls(photoIds)
this.apiService.getPhotoHistory(photoIds)
这是我目前的情况:
let formId: string = '1';
const form = this.apiService.getForm(id);
const style = this.apiService.getFormStructure(id);
forkJoin([form, style])
.subscribe(
(data:Object[]) => {
// handle result
let formData = data[1];
let formStyle = data[2];
let photoIds:number[] = formData.photoIds;
//***What is the best to pass the photo Ids to run the next 2 APIS??****//
}
);
非常感谢您的提前帮助!
你快到了。使用像 switchMap
这样的高阶映射运算符从一个可观察对象切换到另一个。您还可以使用解构赋值
formData
和 formStyle
初始化
forkJoin([form, style]).pipe(
switchMap(([formData, formStyle]) => {
let photoIds: number[] = formData['photoIds'];
return forkJoin([
this.apiService.getPhotoUrls(photoIds)
this.apiService.getPhotoHistory(photoIds)
]);
})
).subscribe({
next: ([urls, history]) => {
// `urls` - response from `apiService.getPhotoUrls(photoIds)`
// `history` - response from `apiService.getPhotoHistory(photoIds)`
},
error: (error: any) => {
// handle error
}
});
forkJoin
运算符和 switchMap
函数的简要比较。