Search code examples
javascriptobjectimportasync-awaitiife

One liner result of Async in JS?


I would like to assign the result of an async IIFE function to an object property.

Something like:

const myObj = {
    dep: (async () => { await import('./myDep'); return myDep;})(),
}

But instead of getting the value I get the promise.

Currently I have to use this which is ugly:

let myObj = {};

(async () => {
    await import('./myDep');
    return myDep;
    })().then((myDep) => {                                                            
        myObj = {
            dep: myDep
        }
    }
});

With top level async, which still is in ECMAScript proposal state I believe this would be simply:

const myObj = {
    dep: await import('./myDep'),
}

Solution

  • Thanks to @JonasWilms

    In the end I did this:

    const myObj = {};
    
    import("./myDep").then(m => myObj.myattrib = m.namedexport);
    

    This works as expected and I have the myObj with the myattrib attribute as the named export of myDep.