RXJS管道过滤内部(嵌套)属性数据



我想从API响应中进行管道和过滤,但响应格式如下:

JSON:

{activeAwards:({名称:"x",状态:"有效的"},{名称:' y ',状态:"有效的"},{名称:"z",状态:"无效"}]}

我试过点击进入"activeAwards"并过滤它。

代码:

.pipe(
tap(data => {
data.activeAwards.filter(award => 
award.status === 'valid';
);
})
)
.subscribe(response => {
console.log(response);
}),
catchError(error => {
return error;
});

但是根据上面的代码,我得到了所有3个对象,也就是它们的全部,应该是2个对象

tap不会改变流数据,filter不会改变输入数组。相反,使用map并分配过滤器结果。

.pipe(
map(data => {
return {
...data, 
activeAwards: data.activeAwards.filter(award => award.status === 'valid');
};
}),
).subscribe(response => {
console.log(response);
}),
catchError(error => {
return error;
});

在本例中,您希望将map添加到筛选数组中,因为您正在更改需要传递到订阅的数据:

.pipe(
// catch the error before transforming the stream to prevent runtime errors
catchError(() => {...})
map((data) => {
data.activeAwards = data.activeAwards.filter(...);
return data;
})
).subscribe(() => {
//handle the data
});

catchError需要在回调中返回一些东西。您可以返回EMPTY(从rxJs导入)以导致流永远不会击中订阅块,或者您可以返回of(null)并在订阅中添加null值的处理。

.pipe(
catchError(err => {
return of(null)
// or return EMPTY - the subscribe block will not run in this case.
})
).subscribe(res => {
if(res) {
//handle the result
}
}) 

相关内容

  • 没有找到相关文章

最新更新