2016-09-13 3 views
2

Wir versuchen Node.js 6.5.0 mit Babel zu verwenden async functions Verwendung Bluebird anstelle von nativen V8 ES6 verspricht zu machen:Babel transformations Asynchron-zu-Modul-Methode mit ES6 drossel Karten

Unsere package.json enthält nur die folgenden Babel Einträge:

"devDependencies": { 
    "babel-cli": "^6.9.0", 
    "babel-plugin-transform-async-to-module-method": "^6.8.0", 
    "babel-plugin-transform-es2015-destructuring": "^6.9.0", 
    "babel-plugin-transform-es2015-modules-commonjs": "^6.14.0", 
} 

und .babelrc:

{ 
    "plugins": [ 
    "transform-es2015-modules-commonjs", 
    "transform-es2015-destructuring", 
    [ 
     "transform-async-to-module-method", 
     { 
     "module": "bluebird", 
     "method": "coroutine" 
     } 
    ] 
    ] 
} 

jedoch unsere async functions Rückkehr ES6 Karte der folgenden Fehler während der Ausführung verursachen:

A value [object Map] was yielded that could not be treated as a promise

Wie wir dieses Problem beheben?

P.S. Alle funktionierte gut, wenn async functions mit transform-async-to-generator

Antwort

2

-generators umgewandelt wurden hier einige Beispielcode, der den gleichen Fehler auslöst:

function giveMap() { 
    return new Map(); 
} 

void async function() { 
    await giveMap(); 
}(); 

Beachten Sie, dass giveMap ist async nicht markiert (was das eigentliche Problem ist).

Dieser Code wird ausgeführt, wenn transform-async-to-generator verwenden, weil Map ‚s sind nachgebende von Generatoren:

function*() { 
    yield new Map(); 
} 

Wenn jedoch transform-async-to-module-method wollen, gibt man den Code auf diese ähnlich wird:

Promise.coroutine(function*() { 
    yield new Map(); 
}); 

Dies wird den Fehler as explained here verursachen, weil Promise.coroutine() erwartet, dass Ergebnisse erbracht werden.

Sie sollten also nach Funktionen Ausschau halten, die eine Map zurückgeben, sind await 'ed on, aber sind nicht zugeordnet async.

+0

Danke. Macht perfekt Sinn. Wir werden nachforschen und Sie wissen lassen. – krl

Verwandte Themen