【发布时间】:2018-12-31 20:38:47
【问题描述】:
我使用 httpclient 从 API 获取一个 json 值,该值包含 angular 6 中的 ID,我将该 ID 传递到另一个 url 以获取每个 ID 的结果,该 ID 将执行 id.length 次。我已经声明了一个数组属性并尝试将第二个 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]
【问题讨论】:
-
您在 URL 调用完成之前记录了
ChildStory。请记住回调函数是如何工作的。如果你想同步做事情,你可以尝试使用Promise.all()或尝试rxjs提供的各种方法 -
但我可以在浏览器控制台中看到响应。 (i.stack.imgur.com/1korE.jpg)。如果 URL 调用未完成,则我看不到正确的结果。只有当我在属性中给出数组位置时,它才会给出未定义。
-
控制台的输出首先出现,URL 稍后完成。如果在push到ChildStpry之后放一个console.log,可以看到结果实际上是push到了数组中。
-
我正在尝试在 for 循环执行后记录结果。你能告诉我在上面的代码中我可以在哪里放置console.log。那会很有帮助。
-
放在
this.ChildStory.push(response)之后