Во-первых, я не программировал более десяти лет (бывший Java-разработчик), поэтому просто знакомлюсь с Angular 4 в качестве хобби, но мне не хватает базового понимания. Я искал обработку задержки извлечения данных с помощью наблюдаемых, но не получил никаких релевантных результатов. Надеюсь, кто-то здесь может помочь и объяснить. Он вращается вокруг следующего кода TypeScript (см. также встроенные комментарии):
Удаленная служба данных
export class RemoteDataService {
private headers = new Headers({ 'Content-Type': 'application/json' });
constructor(private http: Http) { }
public getData(url) {
return this.http.get(url)
.map(
(response: Response) => {
const data = response.json();
return data;
}
)
}
}
СтатьиСервис
export class ArticleService implements OnInit {
_articles: Article[];
constructor(private _remoteDataService: RemoteDataService) {
this.onGet();
console.log(JSON.stringify(this._articles)) **//<- this._articles is null**
setTimeout(()=> console.log(JSON.stringify(this._articles + "////")), 3000)
} **//<- but if I wait 3 seconds this._articles is set to data elements**
public onGet() {
this._remoteDataService.getData('./assets/articles.json')
.subscribe(
(articles: any[]) => {
this._articles = articles,
console.log(this._articles) **//<- this_.articles is set**
},
(error) => console.log(error))
//console.log(this._articles) **//<- if I uncomment this_.articles is null, huh?**
}
}
Выход:
article.service.ts:34 "не определен////"
article.service.ts:46 (20) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…} , ?>{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
article.service.ts:35 "[объект Объект],[объект Объект],[объект Объект],[объект >Объект],[объект Объект],[объект Объект],[объект Объект],[объект Объект],[ объект >Объект],[объект Объект],[объект Объект],[объект Объект],[объект Объект],[объект >Объект],[объект Объект],[объект Объект],[объект Объект],[объект Объект] ,[объект >Объект],[объект Объект]////"
Мои вопросы:
1) Почему в методе onGet()
this._articles
не устанавливается в ноль?
2) Как обычно обрабатывается задержка данных, потому что мой компонент, вызывающий службы, дает сбой, потому что статьи еще не установлены?