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);
Können Sie den transpiled Code vielleicht zeigen? – Bergi
Hm, das sieht so aus als müsste es funktionieren. Ungerade. – Bergi
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