JavaScript is single-threaded but can handle asynchronous operations like fetching data from APIs or reading files. Traditionally, callbacks and promises were used to manage async code, but they can get messy. Enter async/await — a modern syntax that makes asynchronous code look and behave like synchronous code, improving readability and maintainability.
In this blog, you’ll learn how async/await works, with simple examples to get you started.
🧠 What is Async/Await?
- async is a keyword to declare an asynchronous function.
- await pauses the execution inside an async function until a promise settles (resolves or rejects).
- Makes your code easier to read and debug compared to
.then()
chains.
✅ Basic Example
javascriptCopyEditfunction fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("Data loaded");
}, 2000);
});
}
async function load() {
console.log("Start loading...");
const result = await fetchData();
console.log(result); // Prints "Data loaded" after 2 seconds
console.log("Finished loading.");
}
load();
🚀 Using Async/Await with Fetch API
javascriptCopyEditasync function getUser() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users/1');
if (!response.ok) throw new Error("Network response was not ok");
const user = await response.json();
console.log(user.name);
} catch (error) {
console.error("Fetch error:", error);
}
}
getUser();
🔄 Handling Multiple Async Calls
javascriptCopyEditasync function loadAll() {
const urls = [
'https://jsonplaceholder.typicode.com/users/1',
'https://jsonplaceholder.typicode.com/users/2'
];
const promises = urls.map(url => fetch(url).then(res => res.json()));
const results = await Promise.all(promises);
console.log(results);
}
loadAll();
🧰 Benefits of Async/Await
- Cleaner and more readable async code
- Easy error handling using try/catch
- Avoids “callback hell” and reduces chaining complexity
⚠️ Things to Remember
await
only works insideasync
functions.- The async function always returns a promise.
- Use
try/catch
to handle errors inside async functions.
Conclusion:
Async/await is a powerful tool in modern JavaScript that simplifies asynchronous programming. It helps you write cleaner, more maintainable code without losing the benefits of asynchronous operations.
💡 Practice: Try rewriting your existing promise-based code with async/await for better readability.