問題:
可觀察返回透過非同步呼叫取得數據,但由於非同步的本質,存取資料會導致未定義的結果
服務:
@Injectable() export class EventService { constructor(private http: Http) { } getEventList(): Observable<any>{ let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); return this.http.get("http://localhost:9999/events/get", options) .map((res)=> res.json()) .catch((err)=> err) } }
組件:
@Component({...}) export class EventComponent { myEvents: any; constructor( private es: EventService ) { } ngOnInit(){ this.es.getEventList() .subscribe((response)=>{ this.myEvents = response; }); console.log(this.myEvents); //This prints undefined! } }
組件:
非同步操作需要時間才能完成,但 JavaScript 會執行立即同步程式碼。 console.log(this.myEvents);在接收到來自伺服器的資料之前執行。
解決方案:
this.es.getEventList() .subscribe((response)=>{ this.myEvents = response; console.log(this.myEvents); //<-- not undefined anymore });
使用訂閱回呼來處理回應到達後的情況:
結論:
結論:結論:結論:結論:結論:結論:結論:處理非同步操作回呼或訂閱函數以在收到資料後存取資料。這可確保資料不是未定義或為空。以上是如何在非同步 HTTP 呼叫後正確存取 Angular Observable 中的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!