无法解决承诺时使用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
版本的再生器提交。