2016-04-09 4 views
1

Alle Version von babel eine await Anweisung an einen _asyncToGenerator Anruf übersetzen, hat es offensichtlich einige Unzulänglichkeiten auf:Warum übersetzt Babel async/awaist auf Regeneratoren?

  1. Codegröße wächst dramatisch
  2. Benötigt die regeneratorRuntime Bibliothek

Von meinem Verständnis der Syntax Ich denke, jede await sollte einem Promise#then Aufruf entsprechen, so der folgende Code:

try { 
    let user = await getUser(); 
    console.log(user.name); 
} 
catch (error) { 
    console.error(error); 
} 

ist nur äquivalent zu:

let promise$of$getUser$ = getUser(); 
$promise$of$getUser$.then(
    $result$ => console.log($result$), 
    $error$ => console.error($error$) 
); 

Auf diese Weise ist es auch möglich richtig mehr await Aussagen zur Karte oder sogar eine Mischung aus Promise#then und await Aussagen zu einer Promise Kette, also muß ich einige Fälle übersehen, wo rein Promise#then ist nicht geeignet für await Aussagen.

Antwort

1

Sie können die anderen 2 Plugins verwenden: async-to-generator und async-to-module-method.

Es gibt auch ein experimentelles Plugin namens kneden, das versucht, das zu tun, was Sie vorschlagen (asynchron zu versprechen). Es ist immer noch WIP und berücksichtigt nicht alle Fälle und wird höchstwahrscheinlich nicht in der Lage sein.

1

Ich glaube, Sie mit Blick auf Schleifen:

for (let userId of userIds) { 
    const user = await getUser(userId); 
    console.log(user); 
} 
+0

Danke, nach einigen Recherchen I Schleifen und Bedingungen finden sind möglich richtig zu behandeln, ist aber wirklich schwer, Mischungen all dieser Komplexität kann der Grund sein, nicht zu unterstützen übersetzen erwarten direkt in Promise – otakustay

Verwandte Themen