'Perform an action after a promise.then callback

I'm trying to encapsulate some intialization / clean up code in a single Promise. What I want if to execute some code, execute the then and then execute some more code. This is what I came up with:

function initialize() {
    let callback;
    console.log('intialization');
    const promise = new Promise(resolve => callback = resolve);

    new Promise(async () => {
        await callback();
        await promise;
        console.log('cleanup');
    });

    return promise;
}
initialize().then(() => console.log('execute then'));

which gives me the following output in the terminal:

initialization
execute then
cleanup
- Promise {<fulfilled>: undefined}

All good so far. However, when we make the callback async, it no longer works.

initialize().then(
    async () => {
        await new Promise(resolve => {
            setTimeout(
                () => {
                    console.log('execute then');
                    resolve();
                },
                10000
            )
        })
    }
);

gives me this output:

initialization
cleanup
- Promise {<pending>}
execute then

I would have expected it to look like this:

initialization
- Promise {<pending>}
execute then
cleanup

How can I fix this? Is this even possible at all?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source