Daniel Billingham
Daniel Billingham

Reputation: 1411

Unable to resolve promise when using async await with babel and ES6 promise

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

Answers (2)

James Tran
James Tran

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

Mark Rousskov
Mark Rousskov

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

Related Questions