Heim > Web-Frontend > js-Tutorial > Wie greife ich nach einem asynchronen HTTP-Aufruf ordnungsgemäß auf Daten von einem Angular Observable zu?

Wie greife ich nach einem asynchronen HTTP-Aufruf ordnungsgemäß auf Daten von einem Angular Observable zu?

Patricia Arquette
Freigeben: 2024-12-23 19:51:15
Original
1084 Leute haben es durchsucht

How to Properly Access Data from an Angular Observable After an Asynchronous HTTP Call?

So geben Sie eine Antwort von einem Observable/HTTP/Async-Aufruf in Angular zurück

Problem:

Ein Observable gibt zurück Daten über einen asynchronen Aufruf, aber der Zugriff auf die Daten führt aufgrund der asynchronen Natur der Daten zu undefinierten Ergebnissen Betrieb.

Service:

@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)
  }
}
Nach dem Login kopieren

Komponente:

@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!
  }
}
Nach dem Login kopieren

Grund:

Asynchrone Vorgänge benötigen Zeit zum Abschluss, aber JavaScript führt synchronen Code sofort aus. console.log(this.myEvents); wird ausgeführt, bevor die Daten vom Server empfangen werden.

Lösung:

Verwenden Sie den Subscribe-Callback, um die Antwort zu verarbeiten, sobald sie eintrifft:

this.es.getEventList()
    .subscribe((response)=>{
        this.myEvents = response;
        console.log(this.myEvents); //<-- not undefined anymore
    });
Nach dem Login kopieren

Fazit:

Verarbeiten Sie asynchrone Vorgänge innerhalb von Rückrufen oder abonnieren Sie Funktionen, um auf Daten zuzugreifen nachdem es empfangen wurde. Dadurch wird sichergestellt, dass die Daten nicht undefiniert oder null sind.

Das obige ist der detaillierte Inhalt vonWie greife ich nach einem asynchronen HTTP-Aufruf ordnungsgemäß auf Daten von einem Angular Observable zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage