首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有babel和ES6 promise的异步等待时无法解析promise

使用带有babel和ES6 promise的异步等待时无法解析promise
EN

Stack Overflow用户
提问于 2015-06-07 03:51:39
回答 2查看 1.9K关注 0票数 6

我有以下节点应用程序包含一个异步功能,等待一个ES6承诺。

代码语言:javascript
复制
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。

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

代码语言:javascript
复制
.pipe(babel({ optional: ["es7.asyncFunctions"] }))

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

转换后的代码:

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

发布于 2015-08-03 22:08:41

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

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

票数 1
EN

Stack Overflow用户

发布于 2021-08-15 04:45:59

我认为你必须等待测试函数。因为测试函数等待一个承诺,所以当你在其他上下文中调用它时,等待测试函数将帮助你等待,直到它完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30686945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档