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