Ich bin neu in Angular 4, also akzeptiere ich, dass ich besser meinen Ansatz ändern kann.Warten auf ein Abonnement und ein Versprechen in Angular 4
Was ich habe, ist dies:
ngOnInit() {
this.route.paramMap
.switchMap((params: ParamMap) => {
var id = +params.get('id');
return this.service.getOne(id);
}).subscribe(data => {
if (data.clientID === 0) {
data.clientID = +this.route.snapshot.queryParams["parentId"];
}
this.model = data;
},); // Subscription
this.lookupService.getList("clients").then(data => {
this.clients = data;
}); // Promise
}
Auf der Client-Seite, ich brauche einen anderen Server Anruf zu machen, aber nur, wenn ich Daten aus den beiden obigen Anrufe. Mit anderen Worten, ich brauche die Subscription
zu vervollständigen (gut, nicht abgeschlossen, aber den Wert) und die Promise
abzuschließen.
Gibt es so etwas wie eine Promise.all
, die funktionieren würde, um auch sicherzustellen, this.model
wurde in den Subscription
Aufruf eingestellt?
EDIT: Ich könnte diese in Serie ausführen, aber aus Leistungsgründen möchte ich sie parallel ausführen.
BEARBEITEN 2: Die Promise
war zum Laden von Suchdaten zum Auffüllen eines Dropdown-Menüs nur einmal vorgesehen. Die Subscription
sollte das Hauptmodell bei jeder Änderung von "ID" in der URL ändern.
So 'lookupService.getList()' sollte nur einmal ausgeführt werden. 'service.getOne()' sollte jedes Mal ausgeführt werden, wenn ein neuer Parameter richtig ankommt? Ok, was ist mit dem 3. Anruf?Du hast gesagt, es sollte warten, bis die anderen beiden produzieren, aber was ist mit der ersten Produktion? Sollte der 3. Anruf nur einmal oder jedes Mal, wenn ein neuer Parameter ankommt, erfolgen? – BeetleJuice
@BeetleJuice Ich habe den dritten Aufruf vereinfacht, nur eine lokale Filterfunktion auszuführen, aber es muss mit jedem neuen Parameter ausgeführt werden, nachdem 'service.getOne()' aktualisiert wurde. –
Ich habe meine Antwort umgeschrieben und eine Demo zur Verfügung gestellt. Wenn Sie sich für eine bessere Lösung entscheiden, bitte unterrichten Sie uns! – BeetleJuice