Await với async là cách để viết hàm bất đồng bộ với tư duy khi viết hàm tuần tự

Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference

Việc này và việc viết JSX giống nhau ở chỗ đó là viết cái này theo cách tư duy của cái kia. JSX là cách để viết JS như thể viết HTML


async function myFunc(doAwait) {
    doSomething();
    if (doAwait) {
        await doSomethingAsync();
    }

    return doSomethingElse();
}

Would be basically equivalent to this:

function myFunc(doAwait) {
    doSomething();
    if (doAwait) {
        return Promise.resolve(doSomethingAsync()).then(doSomethingElse);
    }

    return Promise.resolve(doSomethingElse());
}

For complete equivalence, including synchronous exceptions in any of the functions calls, it would be something like this:

function myFunc(doAwait) {
    try {
        doSomething();
        if (doAwait) {
            return Promise.resolve(doSomethingAsync()).then(doSomethingElse);
        }

        return Promise.resolve(doSomethingElse());
    } catch(e) {
        return Promise.reject(e);
    }
}

Trích từ:: How do JavaScript engines convert async/await to promises under the hood? - Software Engineering Stack Exchange