使用rxjs在Angular中转换http服务响应
以下是用例:使用rxjs在Angular中转换http服务响应,angular,typescript,rxjs,Angular,Typescript,Rxjs,以下是用例: 我正在调用一个返回我ID的http方法 传递上述ID以获取对象响应的数组 答复: [ { "cuisp":"17296744", "instr_type":"Common Stock (CS)", "isConversion":"No", "issue_date":"04/31
- 我正在调用一个返回我ID的http方法
- 传递上述ID以获取对象响应的数组
[
{
"cuisp":"17296744",
"instr_type":"Common Stock (CS)",
"isConversion":"No",
"issue_date":"04/31/2020",
"rev_rule":"common equity tier 1",
"isCumulative":"Noncumulative",
"notional_amt":"8434.695",
"amt_transacted":"8434.695",
"isPerpetual":"Perpetual",
"isFixed":"Floating"
}, ...
]
现在我想向响应中的每个对象添加isEditable:false
。
我尝试了下面的代码
this._httpservice.getTemplateForVersion(this.selected_template).pipe(
concatMap((res: any) => {
return this._httpservice.getTemplateJsonData(res.id).pipe(
mergeAll(),
map((d: any) => {
d['isEditable'] = false;
return d;
})
);
})
).subscribe(res => {
console.log(res);
})
然而,这只是更新响应的第一个元素。
我需要最后的答复
[
{
"cuisp":"17296744",
"instr_type":"Common Stock (CS)",
"isConversion":"No",
"issue_date":"04/31/2020",
"rev_rule":"common equity tier 1",
"isCumulative":"Noncumulative",
"notional_amt":"8434.695",
"amt_transacted":"8434.695",
"isPerpetual":"Perpetual",
"isFixed":"Floating",
"isEditable":false,
}, ...
]
提前感谢。RxJsmap操作符允许您修改流,但修改本身应该在函数内部完成:
map((d: any) => {
return d.map(item => ({...item, isEditable: false}));
})
可能:
返回{…d,isEditable:false}代码>?这和我做的一样…这和我做的一样?这是什么意思?d['isEditable']=false;返回d代码>这与上面的排列相同。。你的建议也试过了。。没有luckIt可能无法解决您的问题,但如果将mergeAll()和map()替换为mergeMap(),则可能更容易理解发生了什么,这是正确的@用户1608841,您不需要mergeAll()
运算符。只需使用concatMap()
,然后使用map()
。实际上,我认为switchMap
更合适,但这可能并不重要,因为http调用无论如何只发出一次。因此,总共:this.\uHttpService.getTemplateForVersion(this.selected\uTemplate).pipe(switchMap(res=>this.\uHttpService.getTemplateJsonData(res.id)),map((d:any[])=>d.map(item=>{…item,isEditable:false})。订阅(res=>{console.log(res);})