Reputation: 1411
I have the following node app containing an async function, awaiting an ES6 promise.
async function test(id){
try {
let val = await Promise.resolve(id);
console.log("val: " + val);
} catch (error) {
console.log("error: " + error);
}
}
test(1);
Result = val: undefined
Expected result: val: 1
I use gulp-babel to compile this to ES5.
I have the following set within the gulp task:
.pipe(babel({ optional: ["es7.asyncFunctions"] }))
I am also requiring in 'babel/polyfill' after npm installing babel.
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);
Upvotes: 6
Views: 2067
Reputation: 139
I think you have to await test function. Because of test function await a Promise, so wait test function when you call it in other context will help you wait until it completed.
Upvotes: 0
Reputation: 971
You appear to be using a version of Babel prior to Babel version 5.5.0
. Before this version, it was possible to have regenerator
(a dependency of Babel) installed at a version less than 0.8.28
, which is the first version where regenerator
started supporting await Promise.resolve(value)
(the code in your example).
Support was added in this commit on the regenerator
side, and Babel upgraded to require at least the 0.8.28
release of regenerator with this commit.
Upvotes: 1