Javascript 异常:Error:Uncaught(承诺中):TypeError:cannotreadproperty';0';有什么建议吗?

Javascript 异常:Error:Uncaught(承诺中):TypeError:cannotreadproperty';0';有什么建议吗?,javascript,angular,typescript,Javascript,Angular,Typescript,自从我开始学习angular2,我就面临着这个问题。 新闻服务 @Injectable() export class NewsServices { private news: News[] = []; constructor(private _http: Http) {} getSingleNews(id: string): Observable <SingleNews[]> { return this._http.get(

自从我开始学习angular2,我就面临着这个问题。 新闻服务

    @Injectable()
    export class NewsServices {
    private news: News[] = [];

    constructor(private _http: Http) {}

    getSingleNews(id: string): Observable <SingleNews[]> {
        return this._http.get(`http://watania.info/getNewsById/${id}`)
            .map((response: Response) => response.json());
    }
    export interface SpecialNews {
    id: string;
    title: string;
    url_title: string;
    image: string;
    category: string;
    summary: string;
    date_to_publish: string;
    }
问题是,当我尝试使用上述任何服务时,在我的任何组件(如新闻组件)中,我在ngOnInit中的console.log(this.relatedNews[0])控制台中没有定义,但在Ngondestory中的console.log(this.relatedNews[0])我得到了数组。此外,我可以在模板中使用相同的变量

    <h1 class="news-header"><span></span> {{selectednews[0]?.title}}</h1>
是一个异步操作。您需要使用回调(
subscribe
)中的
relatedNews
执行以下操作:

this._newsService.getRelatedNews(id).subscribe(
        (relatedNews) => {
          this.relatedNews = relatedNews;
          console.log(this.relatedNews[0]);
    });
将您的console.log(this.relatedNews[0])放入服务的回调中,如下所示:

 this._newsService.getRelatedNews(id).subscribe(
    relatedNews => this.relatedNews = relatedNews);
    console.log(this.relatedNews[0])
});

通常你的console.log会返回你的对象

我试过了,同样的情况也会发生。我没有定义。让我沮丧的是,为什么它在ngDestroy和模板中给了我正确的结果,而不是在ngOnInit@MohammedSabbah我不认为你做了同样的事。它在
ngondestory
中显示日志的原因是,在
ngondestory
中,
this.relatedNews
变量有足够的时间进行定义。我之前在我的答案中打了一个字,你可以像更新的一样尝试一下。现在它工作得很好,非常感谢。所以,现在,在相关新闻上,我需要做同样的事情吗?例如,如果我需要像这样使用它,则为this.metaService.setTitle('News page'+this.relatednews[0].name);我需要像console.log一样插入它吗?@mohammedsabah是的,因为
getRelatedNews
是异步的,这意味着它会在一段时间后发生。在订阅函数内部的一段时间后。查看此答案,以更深入地了解异步函数的工作原理:非常感谢您为我节省了时间:)
this._newsService.getRelatedNews(id).subscribe(
        relatedNews => this.relatedNews = relatedNews);
    });
this._newsService.getRelatedNews(id).subscribe(
        (relatedNews) => {
          this.relatedNews = relatedNews;
          console.log(this.relatedNews[0]);
    });
 this._newsService.getRelatedNews(id).subscribe(
    relatedNews => this.relatedNews = relatedNews);
    console.log(this.relatedNews[0])
});