Angular rxjs forkjoin 不解析链式可观察数组
Angular rxjs forkjoin does not resolve array of chained observable
我正在使用 Angular 10 并尝试使用 forkJoin 处理多个 API 调用。 API 调用是在一个函数内定义的,我还需要在其中处理 API 结果,然后解决每个承诺。我想实现所有这些函数的组合结果被返回。但是,forkJoin 从未得到解决。我究竟做错了什么。我的代码如下:
const promises = [];
for (let i = 0; i < bulkImportSets.length; i++) {
promises.push(
this.policyService.importPolicy({files: bulkImportSets[i]}, this.selectedFiles)
);
}
this.value$ = forkJoin(promises);
importPolicy( policies, filesMetadata): Observable<any> {
let result: { data: { items: { data: any[]; result_code: string } } } = null;
return new Observable( (observer) => {
const url = `${COMMON.LEGACY_API_PATH}sep/import/policy`;
/*
* This is done this way to send data via multipart/form-data
* */
const fd = new FormData();
fd.append('policies', new Blob([JSON.stringify(policies)], {
type: 'application/json'
}));
this.baseService.postData(url, fd).subscribe(
(resolve) => {
result = resolve['data'];
observer.next(result);
},
(error) => {
result = getServiceFailureResponseJson(policies, filesMetadata, error);
observer.next(result);
}
);
} );
}
在错误的情况下,需要使用 'getServiceFailureResponseJson' 转换数据并仍然解析。
postData是一个http客户端调用方法:
postData(url: string, data?: any, params?: any): Observable<import("@angular/common/http").HttpEvent<any[]>>;
固定的 importPolicy 方法是
importPolicy( policies, filesMetadata): Observable<any> {
const fd = new FormData();
fd.append('policies', new Blob([JSON.stringify(policies)], {
type: 'application/json'
}));
return this.baseService.postData(url, fd).pipe(
map(resolve => resolve.data),
catchError(error => of(getServiceFailureResponseJson(policies, filesMetadata, error)))
);
}
与您的代码的不同之处在于,它是使用 rxjs fns 编写的,并且会自动完成。所有其他行为都相同
我正在使用 Angular 10 并尝试使用 forkJoin 处理多个 API 调用。 API 调用是在一个函数内定义的,我还需要在其中处理 API 结果,然后解决每个承诺。我想实现所有这些函数的组合结果被返回。但是,forkJoin 从未得到解决。我究竟做错了什么。我的代码如下:
const promises = [];
for (let i = 0; i < bulkImportSets.length; i++) {
promises.push(
this.policyService.importPolicy({files: bulkImportSets[i]}, this.selectedFiles)
);
}
this.value$ = forkJoin(promises);
importPolicy( policies, filesMetadata): Observable<any> {
let result: { data: { items: { data: any[]; result_code: string } } } = null;
return new Observable( (observer) => {
const url = `${COMMON.LEGACY_API_PATH}sep/import/policy`;
/*
* This is done this way to send data via multipart/form-data
* */
const fd = new FormData();
fd.append('policies', new Blob([JSON.stringify(policies)], {
type: 'application/json'
}));
this.baseService.postData(url, fd).subscribe(
(resolve) => {
result = resolve['data'];
observer.next(result);
},
(error) => {
result = getServiceFailureResponseJson(policies, filesMetadata, error);
observer.next(result);
}
);
} );
}
在错误的情况下,需要使用 'getServiceFailureResponseJson' 转换数据并仍然解析。
postData是一个http客户端调用方法:
postData(url: string, data?: any, params?: any): Observable<import("@angular/common/http").HttpEvent<any[]>>;
固定的 importPolicy 方法是
importPolicy( policies, filesMetadata): Observable<any> {
const fd = new FormData();
fd.append('policies', new Blob([JSON.stringify(policies)], {
type: 'application/json'
}));
return this.baseService.postData(url, fd).pipe(
map(resolve => resolve.data),
catchError(error => of(getServiceFailureResponseJson(policies, filesMetadata, error)))
);
}
与您的代码的不同之处在于,它是使用 rxjs fns 编写的,并且会自动完成。所有其他行为都相同