Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays angular 6,如何将来自api的响应合并到单个数组中_Arrays_Json_Angular_Observable - Fatal编程技术网

Arrays angular 6,如何将来自api的响应合并到单个数组中

Arrays 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获取信息的两种方法。

这里我得到了两个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.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。