Asynchronous programming in TypeScript, like in JavaScript, allows you to execute tasks concurrently without blocking the main thread. TypeScript provides several features and patterns to work with asynchronous code effectively. Here's an overview of asynchronous programming in TypeScript:
1. Callbacks:
- Callbacks are a basic asynchronous pattern in TypeScript.
- They involve passing a function as an argument to another function, which is called when the asynchronous operation completes.
- Example:
- function fetchData(callback: (data: any) => void) { // Simulate fetching data asynchronously setTimeout(() => { const data = 'Some data'; callback(data); }, 1000); } // Usage fetchData((data) => { console.log(data); });
- Promises provide a more structured way to work with asynchronous code and handle asynchronous operations.
- Promises represent the eventual completion or failure of an asynchronous operation and allow chaining operations.
- Example:
- function fetchData(): Promise<any> { return new Promise((resolve, reject) => { // Simulate fetching data asynchronously setTimeout(() => { const data = 'Some data'; resolve(data); }, 1000); }); } // Usage fetchData() .then((data) => { console.log(data); }) .catch((error) => { console.error(error); });
- Async functions and the
await
keyword provide a more synchronous-like way to work with promises and asynchronous code. - Async functions return a promise, and the
await
keyword pauses the execution of the function until the promise is resolved. - Example:
- async function fetchData(): Promise<any> { return new Promise((resolve) => { // Simulate fetching data asynchronously setTimeout(() => { const data = 'Some data'; resolve(data); }, 1000); }); } // Usage async function fetchDataAndLog() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error(error); } } fetchDataAndLog();
- It's essential to handle errors appropriately in asynchronous code.
- In promises, you can use
.catch()
to handle errors, and in async/await, you can usetry/catch
. - Example:
- async function fetchData(): Promise<any> { return new Promise((resolve, reject) => { // Simulate fetching data asynchronously setTimeout(() => { const error = new Error('Failed to fetch data'); reject(error); }, 1000); }); } // Usage async function fetchDataAndLog() { try { const data = await fetchData(); console.log(data); } catch (error) { console.error(error); } } fetchDataAndLog();
- The
fetchData
function returns a Promise that resolves with some data after a delay of 1 second. - In the Promise example, we use
.then()
to handle the resolved data and.catch()
to handle any errors. - In the async/await example, we use
await
within an async function to wait for the Promise to resolve, and we handle errors usingtry/catch
. - Both approaches achieve the same result: fetching data asynchronously and logging it to the console while handling any errors that may occur during the process.
- Keep doing other things and check back later (like getting coffee while waiting for your order), or
- Stay right there and wait (like watching the loading icon on your screen).
Promises: It's like making a promise to someone. You say, "I'll do this for you, and when I'm done, I'll let you know." When you make a promise, you can continue doing other things while waiting for it to be fulfilled.
async/await: It's like asking someone to do something for you, but you want to wait until they finish before you do anything else. So you say, "Please do this for me, and I'll wait here until you're done."
- Promises: You ask for something and do other things while waiting.
- async/await: You ask for something and wait until you get it before doing anything else.
2. Promises:
3. Async/Await:
4. Handling Errors:
Example: Fetching Data Asynchronously
Suppose we have a function fetchData
that simulates fetching data from an API asynchronously with a delay.
// Function to fetch data asynchronously (simulated API call) function fetchData(): Promise<string> { return new Promise((resolve, reject) => { // Simulate API call with a delay of 1 second setTimeout(() => { const data = 'Some data from API'; resolve(data); }, 1000); }); }
Using Promises:
Using async/await:
In this example:
Example: Fetching Data from a Website
Imagine you want to get information from a website, but it takes some time to get it. Here's how you can do it:
Step 1: Sending a Request
You ask the website for the information you need. But since it might take a while, you don't want to wait and do nothing.
Step 2: Waiting for the Response
You wait patiently for the website to respond. You can either:
Step 3: Getting the Data
When the website responds, it sends you the information you asked for. Hooray! Now you can use that information.
Explanation:
Example (Simplified):
Step 1: Sending a Request
You send a request to the website, saying, "Please give me some information."
Step 2: Waiting for the Response
You wait patiently, doing other things in the meantime.
Step 3: Getting the Data
When the website responds, it sends you the information you asked for.
Conclusion:
Both methods help you handle waiting for things to happen without freezing or stopping everything else.
0 Comments