2015-06-06 9 views
5

Ich habe die folgende Knoten-App, die eine asynchrone Funktion enthält und auf ein ES6-Versprechen wartet.Versprechen kann nicht gelöst werden, wenn async verwendet wird, warten mit babel und ES6 Versprechen

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

test(1); 

Ergebnis = val: val: 1

ich schluck-babel dies ES5 zu kompilieren

Erwartetes Ergebnis undefiniert.

Ich habe folgende in der schluck Aufgabe gestellt:

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

ich auch in 'babel/polyfill' nach npm Installation babel bin erfordern.

Transpiled Code:

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

Können Sie den transpiled Code vielleicht zeigen? – Bergi

+0

Hm, das sieht so aus als müsste es funktionieren. Ungerade. – Bergi

+0

Meiner Erfahrung nach ist es keine gute Übung, try catch-Anweisungen mit Versprechungen zu verwenden. Aus diesem Grund haben Sie API-Aufrufe wie Promise.fail(). Aber ich weiß nicht, wie Babel Versprechungen handhabt, also könnte ich mich irren. – tutiplain

Antwort

0

Sie scheinen eine Version von Babel vor Babel Version 5.5.0 werden. Vor dieser Version war es möglich, regenerator (eine Abhängigkeit von Babel) bei einer Version weniger als 0.8.28 installiert, die die erste Version regenerator unterstützt await Promise.resolve(value) unterstützt (der Code in Ihrem Beispiel).

Unterstützung wurde in this begehen auf der regenerator Seite hinzugefügt, und Babel zumindest die 0.8.28 Freisetzung von Regenerator mit this verpflichten, benötigen ein Upgrade.

Verwandte Themen