Home >Web Front-end >JS Tutorial >Mastering Asynchronous JavaScript: Callbacks, Promises, and Async/Await
Asynchronous JavaScript allows tasks to be executed independently of the main thread, ensuring that the application remains responsive and efficient. This is especially important for handling operations like API calls, file reading, or delays.
console.log("Start"); console.log("End"); // Output: // Start // End
console.log("Start"); setTimeout(() => { console.log("Async Task"); }, 2000); console.log("End"); // Output: // Start // End // Async Task
A callback is a function passed as an argument to another function, executed after the completion of an asynchronous task.
Example:
function fetchData(callback) { setTimeout(() => { callback("Data fetched!"); }, 2000); } fetchData((data) => { console.log(data); // Output: Data fetched! });
Drawbacks:
A Promise represents a value that may be available now, in the future, or never.
States of a Promise:
Creating a Promise:
const fetchData = new Promise((resolve, reject) => { setTimeout(() => { resolve("Data fetched!"); }, 2000); }); fetchData.then((data) => { console.log(data); // Output: Data fetched! });
Handling Errors:
fetchData .then((data) => console.log(data)) .catch((error) => console.error(error));
async and await provide a more readable syntax for working with promises.
Example:
async function fetchData() { const data = await new Promise((resolve) => { setTimeout(() => resolve("Data fetched!"), 2000); }); console.log(data); // Output: Data fetched! } fetchData();
Error Handling:
async function fetchData() { try { const data = await new Promise((resolve, reject) => { reject("Error fetching data!"); }); console.log(data); } catch (error) { console.error(error); // Output: Error fetching data! } } fetchData();
The fetch API is a modern way to make HTTP requests.
async function getData() { const response = await fetch("https://jsonplaceholder.typicode.com/posts/1"); const data = await response.json(); console.log(data); } getData();
Asynchronous behavior in event handling.
document.getElementById("button").addEventListener("click", () => { setTimeout(() => { console.log("Button clicked!"); }, 1000); });
Using setTimeout and setInterval for delays.
setTimeout(() => console.log("Timeout executed!"), 2000);
The Event Loop is the mechanism that manages asynchronous operations in JavaScript. Tasks are queued and executed in the following order:
console.log("Start"); console.log("End"); // Output: // Start // End
Forgetting to Handle Errors:
Blocking the Main Thread:
Callback Hell:
Technique | Description |
---|---|
Callbacks | Functions executed after async tasks. |
Promises | Chained mechanism for async tasks. |
Async/Await | Cleaner syntax for handling promises. |
Understanding and leveraging asynchronous programming in JavaScript is crucial for creating responsive and efficient web applications. By mastering callbacks, promises, and async/await, developers can manage asynchronous tasks effectively.
Hi, I'm Abhay Singh Kathayat!
I am a full-stack developer with expertise in both front-end and back-end technologies. I work with a variety of programming languages and frameworks to build efficient, scalable, and user-friendly applications.
Feel free to reach out to me at my business email: kaashshorts28@gmail.com.
The above is the detailed content of Mastering Asynchronous JavaScript: Callbacks, Promises, and Async/Await. For more information, please follow other related articles on the PHP Chinese website!