Ich muss Daten abrufen, und es könnte einige Zeit dauern. Wenn es mehr als 100ms dauert, möchte ich einen Loader anzeigen. Das ist, was ich tatsetTimeout und Versprechen
fetchOptions(value, page = 0){
return new Promise((resolve, reject) => { ... });
}
getOptions(text, page = 0) {
if (this.requestTimeout) clearTimeout(this.requestTimeout);
this.requestTimeout = setTimeout((()=>{
console.log("!!");
}), 100);
this.fetchOptions(text, page)
.then(data => {
//do something
//if (this.requestTimeout) clearTimeout(this.requestTimeout);
})
.catch(e => console.log(e));
}
fetchOptions
Werke für 5 Sekunden weil es eine Funktion wie
sleep(ms) {
var unixtime_ms = new Date().getTime();
while(new Date().getTime() < unixtime_ms + ms) {}
}
enthält (weil ich langen Abrufprozess testen wollte).
Als Ergebnis wird console.log
nur nach dem Versprechen aufgerufen gelöst. Ich brauche wirklich eine Hilfe, um zu verstehen, warum es passiert und wie man dieses Problem löst
'while (new Date(). GetTime()
tcooc
@ tcooc hat Recht. Sie verwenden lieber eine Zusage mit einer Auflösung für die Methode "sleep". So: sleep (ms) {neues Versprechen zurückgeben ((auflösen, ablehnen) => {setTimeout (auflösen, 5000);})} – dejakob
Danke Jungs, es macht Sinn. Fühle mich jetzt wirklich blöd :) –