Ich muss eine Methode aufrufen, nachdem ich die Daten aus der http-Post-Anforderung erhalten habe
Dienst: request.service.TS
get_categories(number){
this.http.post( url, body, {headers: headers, withCredentials:true})
.subscribe(
response => {
this.total = response.json();
}, error => {
}
);
}
Komponente: categories.TS
search_categories() {
this.get_categories(1);
//I need to call a Method here after get the data from response.json() !! e.g.: send_catagories();
}
Funktioniert nur, wenn ich ändere in:
Dienst: request.service.TS
get_categories(number){
this.http.post( url, body, {headers: headers, withCredentials:true})
.subscribe(
response => {
this.total = response.json();
this.send_catagories(); //here works fine
}, error => {
}
);
}
Aber ich muss die Methode send_catagories()
innerhalb der Komponente nach dem Aufruf von this.get_categories(1);
wie folgt aufrufen
Komponente: Kategorien.TS
search_categories() {
this.get_categories(1);
this.send_catagories(response);
}
Was mache ich falsch?
Aktualisieren Sie Ihre Methode "get_categories()`", um die Gesamtzahl (verpackt in einer Observable) zurückzugeben:
// Note that .subscribe() is gone and I've added a return.
get_categories(number) {
return this.http.post( url, body, {headers: headers, withCredentials:true})
.map(response => response.json());
}
In search_categories()
können Sie die Observable, die von get_categories()
zurückgegeben wird, abonnieren (oder Sie können sie weiter umwandeln, indem Sie weitere RxJS-Operatoren verketten):
// send_categories() is now called after get_categories().
search_categories() {
this.get_categories(1)
// The .subscribe() method accepts 3 callbacks
.subscribe(
// The 1st callback handles the data emitted by the observable.
// In your case, it's the JSON data extracted from the response.
// That's where you'll find your total property.
(jsonData) => {
this.send_categories(jsonData.total);
},
// The 2nd callback handles errors.
(err) => console.error(err),
// The 3rd callback handles the "complete" event.
() => console.log("observable complete")
);
}
Beachten Sie, dass Sie nur EINMAL abonnieren, am Ende.
Wie ich in den Kommentaren sagte, akzeptiert die Methode .subscribe()
eines beliebigen Observable 3 Rückrufe wie diesen:
obs.subscribe(
nextCallback,
errorCallback,
completeCallback
);
Sie müssen in dieser Reihenfolge übergeben werden. Sie müssen nicht alle drei übergeben. Oftmals wird nur der nextCallback
implementiert:
obs.subscribe(nextCallback);
Sie können Ihrer Liste von get_category(...)-Parametern eine Callback-Funktion hinzufügen.
Beispiel:
get_categories(number, callback){
this.http.post( url, body, {headers: headers, withCredentials:true})
.subscribe(
response => {
this.total = response.json();
callback();
}, error => {
}
);
}
Und dann können Sie einfach get_category(...) wie folgt aufrufen:
this.get_category(1, name_of_function);