繁体   English   中英

Angular无法在数组属性中推送http响应

[英]Angular could not push http response in array property

我正在使用httpclient从API获取一个JSON值,该API的ID在角度6中包含ID,并且正在另一个URL中传递该ID以获取将执行id.length次的每个ID的结果。 我已经声明了一个数组属性,并试图将第二个http结果推入数组。 注销结果时,可以看到结果没有插入方括号中; json值不包含在方括号内。 请在下面的图片中找到结果。 任何人都可以给我解决方案如何在数组属性中正确推入值。

角服务:

    import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { Stories } from '../stories';
import { error } from 'util';
import { tap, map, catchError } from 'rxjs/operators';




@Injectable({
  providedIn: 'root'
})
export class HackerStoriesService {

  Story: Array<any> = [];
  ChildStory: Array<object> = []; 

  constructor(private http: HttpClient) { 

  }

  getStories(){
    this.http.get<Stories[]>('URL')
    .subscribe((response) => {
      this.Story = response;

      for(let i=0;i<=this.Story.length;i++){
           this.http.get('URL'+this.Story[i]+'.json')
           .subscribe((response)=> {
             this.ChildStory.push(response)
           })  

      }
      console.log(this.ChildStory)

     return this.ChildStory; 
    },
   (error) => {console.log("Error occurred" + error)},
 ()=> {console.log("The subscription is completed")});



 }


}

结果:

当我记录结果console.log(this.ChildStory)时,得到以下结果。) https://i.stack.imgur.com/1korE.jpg [1]

当您调用console.log时,该变量为null,但是当您稍后在控制台中查看它时,该变量将被填充,这就是为什么您可以在其中看到值的原因。 (如前所述这里

您可以在getStory()函数中执行的操作是返回一个Observable。 它可能看起来像:

getStories() {
    return new Observable<Stories[]> ( (observer) => {
        this.http.get<Stories[]>('URL').subscribe((response) => {

            this.Story = response;
            let storiesCalls = [];
            for (let i = 0; i < this.Story.length; i++) {
                storiesCalls.push(this.http.get('URL' + this.Story[i]+'.json'));
            }

            forkJoin(storiesCalls).subscribe((childStories) => {
                observer.next(childStories);
                observer.complete();
            });

        }, (error) => {
            console.log("Error occurred" + error)
            observer.error(error);
            observer.complete();
        });
    });
}

然后,您可以在要使用检索到的值的任何地方订阅返回的Observable:

hackerStoriesServiceInstance.getStories().subscribe((childStories) => {
    //do stuff with childStories object
}

我没有时间运行代码,因此可能会有一些“错误”,如果您发现任何问题,请告诉我,并将更新答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM