async function always returns promise.

It tries to return "not promise value" but it covers "resolved promise" to return promise.

When JS meets "await", it waits until promise settled.

result returns after all things settled.

async function f() {
    
    let promise = new Promise((resolve, reject) => {
        setTimeout(() => resolve("after 3000ms, done!"), 3000)
    });

    console.log("Let's wait")

    let result = await promise; // wait until promise executed.

    console.log(result)
}

f();