setTimeout
eine Verzögerung vor einen Funktionsaufruf fügt hinzu, während async
/await
syntaktischer Zucker ontop Versprechen ist, Code ein Weg zur Kette nach ein Aufruf abgeschlossen laufen, so dass sie‘ wieder anders.
SetTimeout hat schreckliche Fehler-Handhabungseigenschaften, so empfehle ich in jedem Code die folgenden:
let wait = ms => new Promise(resolve => setTimeout(resolve, ms));
und dann setTimeout
nie wieder direkt aufrufen.
Ihr Code jetzt wird:
let foo = async() => {
await wait(2000);
await this._doSomething();
}
außer foo
wartet doSomething
zu beenden. Dies ist normalerweise wünschenswert, aber ohne Kontext ist es schwer zu wissen, was Sie wollen. Wenn Sie bedeuten doSomething
parallel zu anderem Code auszuführen, empfehle ich:
async() => { await Promise.all([foo(), this._otherCode()]); };
beizutreten und Fehler an der gleichen Stelle zu erfassen.
Wenn Sie wirklich warten, bis es zu feuern und vergessen _doSomething
und nicht dazu gedacht, können Sie die await
verlieren, aber Sie sollten versuchen,/catch Fehler:
async() => {
let spinoff = async() => { try { await foo(); } catch (e) { console.log(e); } };
spinoff(); // no await!
}
Aber ich glaube nicht, dass die Muster empfehlen, da es ist subtil und kann leicht zu übersehen sein.
_ "Der Code sieht so aus" _ Unwahrscheinlich, und deshalb sollten Sie 'async' und' await' nicht entfernen. Es ergibt keinen Sinn in diesem Beispiel, aber das bedeutet nicht, dass es im (echten) Code sinnlos ist. – zeroflagL
Es ist ein bisschen unklar, was Sie hier genau fragen. Wie soll das Stück Code ** funktionieren und wie könnte das Entfernen von "Async" und "Warten" ** das ändern? Ohne eine klare Frage, die eine tatsächliche * Antwort * hat, erhalten Sie nur sehr breite und eigensinnige Ratschläge. – noppa
Ich habe die Frage bearbeitet, um klarer zu machen, was ich versuche zu erreichen. – Marta