Kennen Sie eine Lösung für mein Problem? Ich brauche eine flexible Folge von abonnierten in einer beobachtbaren wie hier gekapselte:Angular2 benutzerdefinierte Observablen mit einigen sequentiellen abonniert
saveData() {
return new Observable((observer) => {
let success = true;
if(example === true) {
this.saveCallbarrings().subscribe((response) => {
// this response was ignored from angular
success = (response === true);
});
}
if(example2 === true) {
this.saveCallbarrings().subscribe((response) => {
// this response was ignored from angular too
success = (response === true);
});
}
// and so on ... in the end I need a result of all responses
observer.next(success);
});
}
Am Ende habe ich das Ergebnis dieser „Antwort-Sammlung“ bezeichnet in meiner einreichen Methode:
onSubmit() {
// Validations and others
...
if(this.isNew) {
observable = this.create();
} else {
observable = this.update();
}
return observable.subscribe(success => {
if(success == true) {
let subscription = this.saveData().subscribe(successFinished => {
// And here is the problem, because this var doesnt have the correct response
if(successFinished === true) {
this.alertService.success('ALERT.success_saved', {value: 'ALERT.success_edit_user', param: {user: this.user.username}});
}
});
subscription.unsubscribe();
}
});
der Haupt Problem ist, dass eckig nicht wartet, bis der "Erfolg" var im ersten Codeblock abonniert ist. Warum und was ist die bessere Lösung für mich?
Sie können nicht warten, bis ein Observable oder eine Versprechung abgeschlossen ist. Sie können es nur abonnieren, um benachrichtigt zu werden, wenn es ein Ereignis abschließt oder ausstrahlt. Können Sie bitte die Methode saveExtendedData Service hinzufügen, da Sie die Änderung dort vornehmen können? –
Entschuldigung, ich habe einen Fehler in meinem zweiten Codeblock. Die Methode "this.saveExtendedData()" sollte "this.saveData()" lauten. – Joeker
in der Datensicherungsmethode statt Wert der Erfolgsvariable zuzuweisen, gebe das Ergebnis zurück –