rpetrich / babel-plugin-transform-async-to-promises

Transform async/await to somewhat idiomatic JavaScript promise chains
MIT License
246 stars 17 forks source link

break transform to return #73

Open chinayu9 opened 2 years ago

chinayu9 commented 2 years ago

source code:

const test1 = async () => {
    return Promise.resolve("1");
}

export const test2 = async () => {
    const r = await test1();
    switch (r) {
        case "1":
            console.log("1111");
            break;
        case "2":
            console.log("2222");
            break;
    }
    console.log("33333333333");
}

transformed code:

_$pi.define("client/app_a/a1", ["require", "exports", "module"], function (require, exports, module) {
    "use strict";

    exports.test2 = void 0;
    const test1 = function () {
        try {
            return Promise.resolve("1");
        } catch (e) {
            return Promise.reject(e);
        }
    };
    exports.test2 = function () {
        try {
            return Promise.resolve(test1()).then(function (r) {
                switch (r) {
                    case "1":
                        console.log("1111");
                        return;

                    case "2":
                        console.log("2222");
                        return;

                }
                console.log("333");
            });
        } catch (e) {
            return Promise.reject(e);
        }
    };
});

break transformed to return,the last print 333 can not be printed

rpetrich commented 2 years ago

Which version are you using? I've imported the following test case:

async () => {
    const r = await test1();
    switch (r) {
        case "1":
            console.log("1111");
            break;
        case "2":
            console.log("2222");
            break;
    }
    console.log("33333333333");
}

And get the following output on version 0.8.16:

function(){try{return Promise.resolve(test1()).then(function(r){switch(r){case"1":console.log("1111");break;case"2":console.log("2222");break;}console.log("33333333333");});}catch(e){return Promise.reject(e);}}

Which unminifies to:

function() {
    try {
        return Promise.resolve(test1()).then(function(r) {
            switch (r) {
                case "1":
                    console.log("1111");
                    break;
                case "2":
                    console.log("2222");
                    break;
            }
            console.log("33333333333");
        });
    } catch (e) {
        return Promise.reject(e);
    }
}
rpetrich commented 2 years ago

@chinayu9 checking in. do you have any thoughts on the test case?