2015-06-06 13 views
5

Mam następującą aplikację węzła zawierającą funkcję asynchroniczną, oczekującą na obietnicę ES6.Nie można spełnić obietnicy przy korzystaniu z asynchronizacji oczekującej z babel i obietnicą ES6

async function test(id){ 
    try { 
     let val = await Promise.resolve(id); 
     console.log("val: " + val); 
    } catch (error) { 
     console.log("error: " + error); 
    } 
} 

test(1); 

Wynik = val: niezdefiniowane

oczekiwany wynik: Val: 1

używam haustem-babel skompilować to ES5.

Mam następujący zestaw w ramach zadania haustem:

.pipe(babel({ optional: ["es7.asyncFunctions"] })) 

Ja również wymagając w 'Babel/PolyFill' po npm instalacyjnej Babel.

kod Transpiled:

function test(id) { 
var val; 
return regeneratorRuntime.async(function test$(context$1$0) { 
    while (1) switch (context$1$0.prev = context$1$0.next) { 
     case 0: 
      context$1$0.prev = 0; 
      context$1$0.next = 3; 
      return Promise.resolve(id); 

     case 3: 
      val = context$1$0.sent; 

      console.log('val: ' + val); 
      context$1$0.next = 10; 
      break; 

     case 7: 
      context$1$0.prev = 7; 
      context$1$0.t0 = context$1$0['catch'](0); 

      console.log('error: ' + context$1$0.t0); 

     case 10: 
     case 'end': 
      return context$1$0.stop(); 
    } 
}, null, this, [[0, 7]]); 
} 

test(1); 
+0

Czy możesz pokazać transpiled kod? – Bergi

+0

Hm, wygląda na to, że powinno działać. Dziwny. – Bergi

+0

Z mojego doświadczenia wynika, że ​​nie jest dobrą praktyką stosowanie instrukcji catch o obietnicach. Właśnie dlatego masz wywołania API takie jak Promise.fail(). Ale nie wiem, jak Babel radzi sobie z obietnicami, więc mogę się mylić. – tutiplain

Odpowiedz

0

Wygląda na to, że używasz wersji Babel przed Babel wersji 5.5.0. Przed tą wersją możliwe było zainstalowanie regenerator (zależność od Babel) w wersji mniejszej niż 0.8.28, która jest pierwszą wersją, w której regenerator zaczęło obsługiwać await Promise.resolve(value) (kod w twoim przykładzie).

Pomoc dodano this popełnić po stronie regenerator i Babel zmodernizowane wymagać przynajmniej 0.8.28 uwalnianie regeneratora z this popełnić.

Powiązane problemy