My App.component
, die eine Init-Methode in meinem user service
aufruft.Laden Sie Daten vor der Komponenteninialisierung - Winkel 2
ngOnInit(){
this.init(true).then(data => {
console.log("OnInit Called")
})
}
User.service
gibt ein promise
was wiederum die account.init
init = (isRegistered) => {
return new Promise((resolve, reject) => {
this.account.init(isRegistered).then(data => {
//some data inialization
console.log("OnInit Called User Service")
});
});
}
nennt Account.service
ein Versprechen gibt, die mit Observable
.forkJoin
init = ((userType: boolean) => {
return new Promise((resolve, reject) => {
Observable.forkJoin([
this.m1,
this.m2]).subscribe(data => {
//persist those return data
});
});
}
- Warum mehrere Dienste ruft beide Konsole. Protokollanweisungen nie wird ausgeführt?
- Warum verhindert es nicht die Komponenteninialisierung, bevor das Observable.forkJoin seine Serviceaufrufe abschließt?
Sie sind wie immer richtig, aber tatsächlich können Sie einen synchronen Serveraufruf machen, so ist es möglich, die Ausführung zu blockieren :) Es ist sinnlos, aber es ist möglich – smnbbrv
Ok, ich nahm an, dass veraltet war, aber es ist noch fraglich wenn Das blockiert die Ausführung wirklich. Es besetzt nur den UI-Thread - eine for-Schleife könnte das Gleiche tun, aber wie Sie sagten - ziemlich sinnlos: D –
:) for-Schleife kann die Ausführung blockieren, aber es wird nie in der Lage sein, ein asynchrones Ergebnis zu erhalten, weil Es wird in die Ereigniswarteschlange verschoben. Die einzige Möglichkeit, die Ausführung zu blockieren, bis async Response empfangen wird, wäre entweder ein ES6 Generator oder async/awa ... Immer noch sinnlos: D – smnbbrv