Arrays angular 6,如何将来自api的响应合并到单个数组中
这里我得到了两个Json响应,即books和authorsArrays angular 6,如何将来自api的响应合并到单个数组中,arrays,json,angular,observable,Arrays,Json,Angular,Observable,这里我得到了两个Json响应,即books和authors this.http.getbooks().subscribe( data=>{ this.getbooksinfo=data; } ) this.http.getauthors().subscribe( data=>{ this.authors=data; } ) getauthors、getbooks info是使用http get方法从restapi获取信息的两种方法。
this.http.getbooks().subscribe(
data=>{
this.getbooksinfo=data;
}
)
this.http.getauthors().subscribe(
data=>{
this.authors=data;
}
)
getauthors、getbooks info是使用http get方法从restapi获取信息的两种方法。如何在单个数组中存储this.author和this.booksinfo?我不知道我的答案是否适合您,但是,您可以在组件中创建一个空数组对象,当您调用restapi时,只需在对象上执行一个
推送操作
比如:
private arrayObject: any = [];
this.http.getbooks().subscribe(
data=>{
this.getbooksinfo=data;
this.arrayObject.push(this.getbooksinfo);
}
)
this.http.getauthors().subscribe(
data=>{
this.authors=data;
this.arrayObject.push(this.authors);
}
)
编辑---
在edkeveked注释之后,您可以使用forkJoin,但需要稍微更改代码
import { forkJoin } from "rxjs/observable/forkJoin";
let apibooks = this.httpClient.get('YOU_API_URL');
let apiauthors = this.httpClient.get('YOU_API_URL');
forkJoin([apibooks, apiauthors]).subscribe(results => { console.log(results); // will print array of results;
console.log(results[0]); // will print apibooks results;
console.log(results[1]); // will print apiauthors results;
});
打印到控制台日志,以便了解发生了什么。您可以选择使用forkJoin
:
const books = this.http.getbooks();
const authors = this.http.getauthors();
forkJoin([books, authors]).subscribe(response => {
// response[0] will be req1 response
// response[1] will be req2 response
})
注释中提到的另一个选项是使用combinelateest
:
combineLatest(books, authors).subscribe(response => {
...
})
让newData=this.getbooksinfo.concat(this.authors)。这样不行,我已经试过了:(,他也可以使用CombineTest。有一个帖子:@ChristianBenseler,很好。谢谢你!你可以用CombineTest更新你的答案,这样它会为OP提供更多信息。@ChristianBenseler对语法不是100%确定,因为我从未亲自使用过CombineTest
,但如果你愿意,请随意编辑并添加它ld like。用法类似于forkJoin:传递一个观察数组并订阅它。这里的示例:注意还有一个combineAll操作符。但是使用这种方法,当两个值都发出时,他将无法“观察”。最好的方法是使用rxjs(并遵循角度方法)是使用rxjs的运算符,如CombineTest或forkJoin。