をhttpリクエストし、応答を解釈することを提案してください。応答には、関数内にロードされていないオブジェクトの配列とその配列が含まれます。Typescriptは、関数の外で宣言された配列をロードしません。
Notes:- making http request.
public getRequest(): void {
let bdoNamesArray: BdoName[];
bdoNamesArray = [];
this.http.get<BdoName[]>(this.bdoNamesUrl, {observe: 'response', responseType: 'json'})
.subscribe((data: HttpResponse<BdoName[]>) => {
let vjyArray: BdoName[];
vjyArray = [];
for (let i = 0; i < data.body.length; i++) {
const obj = new BdoName();
obj.emplid = data.body[i].emplid;
obj.name = data.body[i].name;
vjyArray.push(obj); }
console.log(vjyArray); // Array loaded from http-response
bdoNamesArray.concat(vjyArray); // not loaded
},
error => {
console.log('error on sub');
},
() => {
console.log('sub completed');
}
);
console.log(bdoNamesArray); // Emtpy array !!
}
問題とドンを教えてください:
もう一つの方法は、あなたが別のコールバック関数を持っているかもしれません要求を回避する。 – jhpratt
'bdoNamesArray'は非同期ですが、ネットワークの要求を使って充填していますが、同時に配列を記録しています。だから、データを受け取る前にそれを記録しているので、それは空です。 – CRice
http.get要求の呼び出しが完了した後、コンソールでbdoNamesArrayを記録しています。この時間までに、購読も終了します。私がhttp-responeを取得するとすぐに、vjyArrayがロードされてコンソールに表示されます。私が望んでいたのは、それを別の配列 - bdoNamesArrayにコピーすることでした。 – VJY