angular 6,如何将api的响应合并到一个数组中

时间:2018-06-06 14:16:32

标签: arrays json angular observable

这里我得到了两个Json响应,即书籍和作者。我希望这两个响应在一个数组中

this.http.getbooks().subscribe(
    data=>{
    this.getbooksinfo=data;
    }
)
this.http.getauthors().subscribe(
    data=>{
    this.authors=data;
    }

)

getauthors,getbooks info是两种从restapi获取信息的方法,使用http get method..how将this.author和this.booksinfo存储在单个数组中?

2 个答案:

答案 0 :(得分:2)

您可以选择使用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
})

评论中提到的另一个选项是使用combineLatest

combineLatest(books, authors).subscribe(response => {
 ...
})

答案 1 :(得分:-1)

我不知道我的答案是否适合您,但是,您可以在组件中创建一个空数组对象,当您执行RESTAPI调用时,只需对该对象执行push

类似的东西:

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;
});

打印到控制台日志,以便了解最新情况。