如何解决如何使用forkJoin将成功和失败的请求保存在单独的数组中?
我想保留使用forkJoin在单独数组中的请求中使用的成功和不成功的ID。例如:
let ids = [1001,1002,1003,1004,1005];
let reqs = [];
let successReqs = [];
let failReqs = [];
ids.forEach(id => {
reqs.push(this.componentService.getVal(id))
});
forkJoin(reqs).subscribe(
(results) => {
console.log('ALL RESULT :',results);
},(err) => {
console.log(err);
});
我有一个“ ids”数组,其中包含要在请求中使用的id。使用这些ID,我创建了一个名为“ reqs”的数组,用于forkJoin。但是有时服务可能会失败,因此为了以后使用,我想将成功请求的ID保留在“ successReqs”数组中,并将失败请求的ID保留在“ failReqs”数组中。但是我找不到在成功或失败时如何将这些id添加到数组的方法。返回订阅中所有请求的结果。我该怎么办?
解决方法
不确定它是否是最佳选择,但我只会为每个请求捕获错误,因此,我得到了从不失败的可观察变量数组。
const reqs: Observable<any>[];
const neverFailReqs = reqs.map(req => req.pipe(map(result => ({success: true,result})))
.pipe(catchError(result => ({success: false,result}))));
forkJoin(neverFailReqs).subscribe(results => {
console.log('Success: ' + results.filter(r => r.success).map(r => r.result));
console.log('Fail: ' + results.filter(r => !r.success).map(r => r.result));
})
,
您可以标记每个呼叫的成功和失败,然后稍后将它们分开。
使用此解决方案,您可以看到我将成功的值映射到success: true
并将错误映射到使用success: false
发出错误的流。
稍后,一旦它们全部运行,我可以根据创建的成功标志过滤结果,然后将结果映射回每个结果返回的纯净负载。
无论成功还是失败,我都会保留每个呼叫的ID。
const ids = [1001,1002,1003,1004,1005];
forkJoin(
ids.map(id =>
this.componentService.getVal(id).pipe(
map(val => ({
id,success: true,payload: val
})),catchError(err => of({
id,success: false,payload: err
}))
)
)
).pipe(
map(res => ({
successReqs: res.filter(ob => ob.success).map(ob => ({
id: ob.id,result: ob.payload
})),failReqs: res.filter(ob => !ob.success).map(ob => ({
id: ob.id,error: ob.payload
}))
}))
).subscribe(({successReqs,failReqs}) => {
console.log('Success RESULT :',successReqs);
console.log('Fail RESULT :',failReqs);
}
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。