2015-06-06 12 views
5

Ho la seguente app nodo contenente una funzione asincrona, in attesa di una promessa ES6.Impossibile risolvere la promessa quando si utilizza async con promessa babele ed ES6

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

test(1); 

Risultato = val: undefined

Risultato atteso: val: 1

Io uso sorso-babele per compilare questo per ES5.

Ho il seguente set all'interno del task sorso:

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

Sono anche richiedendo in 'Babel/polyfill' dopo NPM installazione babel.

codice 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

Puoi mostrare il codice transpiled forse? – Bergi

+0

Hm, sembra che dovrebbe funzionare. Dispari. – Bergi

+0

Secondo la mia esperienza non è una buona pratica usare le dichiarazioni catch catch con le promesse. Ecco perché hai chiamate API come Promise.fail(). Ma non ho familiarità con come Babel gestisce le promesse, quindi potrei sbagliarmi. – tutiplain

risposta

0

È sembrano usare una versione di Babele prima Babel versione 5.5.0. Prima di questa versione, era possibile avere regenerator (una dipendenza di Babel) installata a una versione inferiore a 0.8.28, che è la prima versione in cui regenerator ha iniziato a supportare await Promise.resolve(value) (il codice nell'esempio).

supporto è stato aggiunto nel this impegnarsi sul lato regenerator, e Babel aggiornato a richiedere almeno il 0.8.28 rilascio di rigeneratore con this commettere.

Problemi correlati