使用异步等待与babel和ES6承诺无法解决承诺

时间:2015-06-06 19:51:39

标签: javascript node.js async-await babeljs es6-promise

我有以下节点应用程序包含异步功能,等待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:undefined

预期结果:val:1

我使用gulp-babel将其编译为ES5。

我在gulp任务中设置了以下内容:

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

我还要求' babel / polyfill'在npm安装babel之后。

透明代码:

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

1 个答案:

答案 0 :(得分:0)

您似乎在Babel版本5.5.0之前使用的是Babel版本。在此版本之前,可能会在版本低于regenerator时安装0.8.28(Babel的依赖项),这是regenerator开始支持await Promise.resolve(value)的第一个版本(示例中的代码)。

regenerator方面的this提交中添加了支持,并且Babel升级为至少需要0.8.28版本的再生器this提交。