Angular 2/4 forkjoin 中的错误处理 url
Angular 2/4 Error handling in forkjoin url
我是 usimg angular 2 并且我正在使用 forkjoin 作为我必须在 parallel.Following 中执行多个休息调用的场景之一是我的功能
private getBatchObservableData(data: Array<Widget>): Observable<any> {
let observableBatch = [];
data.forEach(widget => {
observableBatch.push(this._http.get(widget.apiPath).delay(500).map((data) => data.json()).share())
});
return Observable.forkJoin(observableBatch);
}
这是完美的 fine.But 当任何一个 rest 调用失败时 wholeforkjoin fails.So 有什么方法可以发出那些 rest 调用的值并只记录失败的。 ??请帮忙。
如果您使用 catch
来防止错误冒泡到 forkJoin
调用,您可以将它们作为值重新发出,并可以检查 forkJoin
的可选项目中的值功能:
private getBatchObservableData(data: Array<Widget>): Observable<any> {
let observableBatch = [];
data.forEach(widget => observableBatch.push(this._http
.get(widget.apiPath)
.delay(500)
.map(data => data.json())
.catch(error => Observable.of(error))
));
return Observable.forkJoin(observableBatch,
(...results) => ({
failed: results.map(r => r instanceof Error ? r : null),
succeeded: results.map(r => r instanceof Error ? null : r)
})
);
}
以上示例将发出一个包含两个数组的对象,每个数组包含与 data
数组相同数量的元素:
- 如果相应的请求失败,
failed
中的元素将包含一个 Error
,否则 null
。
- 如果相应的请求成功,
succeeded
中的元素将包含数据,否则null
。
如果您需要做一些不同的事情,重新安排应该很容易。
我是 usimg angular 2 并且我正在使用 forkjoin 作为我必须在 parallel.Following 中执行多个休息调用的场景之一是我的功能
private getBatchObservableData(data: Array<Widget>): Observable<any> {
let observableBatch = [];
data.forEach(widget => {
observableBatch.push(this._http.get(widget.apiPath).delay(500).map((data) => data.json()).share())
});
return Observable.forkJoin(observableBatch);
}
这是完美的 fine.But 当任何一个 rest 调用失败时 wholeforkjoin fails.So 有什么方法可以发出那些 rest 调用的值并只记录失败的。 ??请帮忙。
如果您使用 catch
来防止错误冒泡到 forkJoin
调用,您可以将它们作为值重新发出,并可以检查 forkJoin
的可选项目中的值功能:
private getBatchObservableData(data: Array<Widget>): Observable<any> {
let observableBatch = [];
data.forEach(widget => observableBatch.push(this._http
.get(widget.apiPath)
.delay(500)
.map(data => data.json())
.catch(error => Observable.of(error))
));
return Observable.forkJoin(observableBatch,
(...results) => ({
failed: results.map(r => r instanceof Error ? r : null),
succeeded: results.map(r => r instanceof Error ? null : r)
})
);
}
以上示例将发出一个包含两个数组的对象,每个数组包含与 data
数组相同数量的元素:
- 如果相应的请求失败,
failed
中的元素将包含一个Error
,否则null
。 - 如果相应的请求成功,
succeeded
中的元素将包含数据,否则null
。
如果您需要做一些不同的事情,重新安排应该很容易。