Winkel - / Typoskript - Aufruf einer Funktion nach der anderen geführt wurde
Möchte ich nennen f2
nach f1
abgeschlossen. f1
Funktion synchrone oder asynchrone. Ich brauche ein Beispiel, das funktioniert in beiden Fällen. Ich habe eine Lösung gefunden, mit einem Promise
und einen timer:
global() {
this.f1().then(res => {
this.f2()
})
}
f1() {
return new Promise<any>((resolve, reject) => {
//Some code...
setTimeout( () => {
resolve(x);
}, 1500);
});
}
f2() {
//Some code...
}
Das problem ist das Programm immer noch warten 1500ms. Ich will nicht f2
starten, bevor f1
fertig ist.
Gibt es eine Möglichkeit zu warten, die Zeit benötigt, nicht mehr oder weniger?
- Was
f2(); f1();
- Warum sind Sie 1500ms warten bis ausgeführt
f2
? Wenn an irgendeinem Punkt in der Zukunft, es dauerte länger, um die Daten abzurufen, die fürf1
zu vervollständigen, würde der code zu brechen. - Sie erweitern Ihre Frage zu sagen, was sonst passiert in
f1
, wenn es nur die code mit Ihrem timeout-dann könnte man sicher löschen. Wenn es einen Aufruf zum abrufen von remote-Daten, dann wird es wieder ein Versprechen also, das ist das Versprechen, das Sie zurückgeben müssen ausf1
und dannf2
wird ausgeführt, sobald die Daten zurückgegeben hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So entfernen Sie die
setTimeout
Teil. Es rufenresolve
oderreject
und übergibt dann die Ausführung an den nächstenthen
odercatch
handler. Wenn Sie einige asynchrone Aufruf an die Verheißung, die Sie anrufenresolve/reject
im Ergebnis, dass der Anruf.Was nicht warten
1500ms
- die Zeit ist tatsächlich die schlechteste Zeit, nach der die Funktion aufgerufen werden kann. Vielleicht nach2000ms
Dies ist im Zusammenhang mit den main-thread in dem JS-code funktioniert. Wenn der Haupt-thread hat keine Arbeit getan, dann werden die Ergebnisse der asynchronen Aufrufe ausgeführt werden.JS:
Entfernen Sie einfach das timeout