无法解决承诺时使用asynchronous与巴贝尔和ES6诺言等待

我有以下节点应用程序包含一个asynchronous函数,等待ES6的承诺。

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

结果= val:未定义

预期结果:val:1

我用gulp-babel把它编译成ES5。

我有以下设置在吞咽任务:

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

在npm安装babel之后,我也需要“babel / polyfill”。

运输代码:

 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); 

在Babel版本5.5.0之前,您似乎使用了一个Babel版本。 在这个版本之前,有可能在regenerator开始支持的第一个版本中安装一个小于0.8.28版本的regenerator (Babel的依赖), await Promise.resolve(value) (你的例子中的代码)。

支持被添加在regenerator端的这个提交中,Babel升级到至less要求0.8.28版本的再生器提交。