2017-05-22 2 views
0

Angesichts der Tatsache, dass async Programmierung seit langem in Javascript üblich ist, scheint die Anzahl der Aufrufe von window.setTimeout für mich sehr hack-ish zu sein. Ich verstehe, wie die VM funktioniert und wie die Ereignisschleife funktioniert. Der Punkt ist, weiß jemand die Begründung dafür, warum die Ecma-Autoren nicht wählen, eine Art von "nextEventLoop" oder "Defer" Anruf hinzufügen, die einen Block der Logik später ausführen zwingen wird?JS Native NextEventLoop

Ich schaue jedes Mal, wenn ich setTimeout (0) sehe, weil kein Autor jemals ein Timeout von Null jemals festgelegt haben wollte. Also warum zwingst du diesen Hack weiter auf uns?

Oder gibt es bessere Alternativen?

Antwort

1

Ab ES6 erfüllt Promise.resolve().then(() => { ... }) das, wonach Sie fragen, und für die meisten Umgebungen, die noch ES5 sind, sind Promise-Polyfills verfügbar. Die meisten Polyfüllungen vermeiden sogar setTimeout zugunsten besserer schneller Optionen wo möglich.

+0

Ja, aber genau das ist es, worüber ich spreche. Dies ist für mich nicht anders als setTimeout und viel ausführlicher. Effektiv verwendet dies eine Einrichtung der Sprache, die nicht explizit für die Verzögerung der Aktion ist, sie verwendet einen _Seiteneffekt_ einer asynchronen Semantik, um das Ziel zu erreichen "hey JS, verschiebe diese Aktion auf nach der aktuellen Warteschlange". Ist das sinnvoll? Ich schätze deine Antwort, aber es ist nur eine andere Art, eine Katze zu häuten, sozusagen. – dudewad

+0

Ich denke, es hängt von deinem Standpunkt ab. 'setTimeout' ist nicht einmal Teil der ES-Spezifikation, es gehört zu HTML und wird in Node kopiert. 'Promise' ist die einzige für den Benutzer sichtbare, ES-spezifizierte Möglichkeit, Dinge in späteren Runden der Ereignisschleife in eine Warteschlange zu stellen. – loganfsmyth

Verwandte Themen