最初はオフに10年以上(元Java開発者)でコード化されていないので、ちょうど趣味として角度4に精通しているが、基本的な理解が不足している。私は観測可能なものでデータ検索の待ち時間を処理することを探しましたが、関連する結果は戻っていませんでした。ここの誰かが助けて説明できることを願っています。それは(あまりにも、インラインコメントを参照)、以下の活字体のコードを中心に展開:データ検索待ち時間を処理する角度
RemoteDataService
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;
}
)
}
}
ArticleService
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 "undefined ////
article.service.ts:46(20)[{...}、{...}、{...}、{...}、{...}、{...}、{... }、{...}、{...}、{...}、{...}、{...}、{...}、{...}、{...}、{...}、{...}、{...}]
article.service.ts:35 "[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト] 、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクト>オブジェクト]、[オブジェクトオブジェクト] //// "
私の質問は:
1)なぜonGet()
メソッドではthis._articles
がnullに設定されるのですか?
2)記事がまだ設定されていないため、サービスを呼び出すコンポーネントがクラッシュしているため、データの遅延はどのように処理されるのですか?
を使用する際のsetTimeout()関数はテスト目的のみのためだったのですときに知らせてみましょうすることをお勧めします。私は非同期のものを取得しますが、なぜ私はそれがnullに設定されてから行っていないです。コードは、それが書かれている順に実行していないので(コード内の最後のコメント) –
は、それはです。 subscribe関数が呼び出されますが、直後にconsole.logが呼び出されます。これは呼び出しが終了する前です。 – dockleryxk
ありがとう、私は命令シーケンス全体を得るが、コンソールがthis_.articlesを実行可能なオブジェクトとして出力してから、すぐにthis._articlesをヌルとして出力する理由をまだ理解していない。私にはnullが毎回印刷されているように見えますが、タイムアウトすると値が最終的に印刷されます。私は今新しい問題に移りましたが、それはまだ私にとっては非常にあいまいです。 –