20 - JavaScript - Asynchronous

20 - JavaScript - Asynchronous

JavaScript is a single-threaded programming language, which means that it can only execute one task at a time. This can be problematic when working with time-consuming tasks that may block the main thread of execution, such as fetching data from a server or reading a large file. Asynchronous programming is a way to work around this limitation by allowing JavaScript to execute multiple tasks at the same time.

Asynchronous programming in JavaScript is typically achieved through the use of callbacks, promises, and async/await. Callbacks are functions that are passed as arguments to other functions and are executed once the main function completes its execution. Promises represent a value that may not be available yet, but will be available at some point in the future. Async/await is a newer way to work with asynchronous JavaScript that makes it even easier to write asynchronous code.

By using asynchronous programming, developers can create more efficient and responsive JavaScript applications that are better suited for time-consuming tasks. Asynchronous programming enables JavaScript to handle multiple tasks simultaneously without blocking the main thread, allowing for faster and more efficient execution of code.

In JavaScript, asynchronous programming is typically achieved through the use of callbacks, promises, and async/await.

Callbacks

Callbacks are functions that are passed as arguments to other functions and are executed once the main function completes its execution. This allows us to perform tasks asynchronously, without blocking the main thread of execution.

Example:

function fetchData(callback) {
  setTimeout(() => {
    const data = [1, 2, 3, 4, 5];
    callback(data);
  }, 1000);
}

function processData(data) {
  console.log(data.map(num => num * 2));
}

fetchData(processData);
console.log('Fetching data...');

Output:

Fetching data...
[2, 4, 6, 8, 10]

In this example, we have a function called fetchData that simulates fetching data from a server by using the setTimeout function. Once the data is fetched, it calls the callback function processData with the fetched data as an argument. The processData function simply logs the data to the console after performing some manipulation on it.

Promises

Promises are another way to work with asynchronous JavaScript. Promises represent a value that may not be available yet but will be available at some point in the future. Promises have three states: pending, fulfilled, or rejected. Once a promise is fulfilled or rejected, it cannot change its state.

Example:

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const data = [1, 2, 3, 4, 5];
      resolve(data);
    }, 1000);
  });
}

function processData(data) {
  console.log(data.map(num => num * 2));
}

fetchData()
  .then(processData)
  .catch(error => console.error(error));
console.log('Fetching data...');

Output:

codeFetching data...
[2, 4, 6, 8, 10]

In this example, we have a function called fetchData that returns a new promise. The promise is fulfilled after 1 second with the fetched data as its value. The processData function is then called with the fulfilled value as an argument using the .then method. If the promise is rejected, the error is caught by the .catch method.

Async/await

Async/await is a newer way to work with asynchronous JavaScript that makes it even easier to write asynchronous code. The async keyword is used to declare a function as asynchronous, and the await keyword is used to wait for a promise to be fulfilled before continuing execution.

Example:

codefunction fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const data = [1, 2, 3, 4, 5];
      resolve(data);
    }, 1000);
  });
}

async function processData() {
  const data = await fetchData();
  console.log(data.map(num => num * 2));
}

processData()
  .catch(error => console.error(error));
console.log('Fetching data...');

Output:

codeFetching data...
[2, 4, 6, 8, 10]

In this example, we have a function called fetchData that returns a new promise

Summarizing Up

Asynchronous programming in JavaScript enables the language to handle multiple tasks simultaneously without blocking the main thread, allowing for faster and more efficient execution of code. This is achieved through the use of callbacks, promises, and async/await. Callbacks are functions that are executed once the main function completes its execution. Promises represent a value that may not be available yet but will be available in the future. Async/await is a newer and simpler way to work with asynchronous JavaScript. Asynchronous programming makes JavaScript applications more responsive and efficient when handling time-consuming tasks.

Did you find this article valuable?

Support Bosonique ITEdTech by becoming a sponsor. Any amount is appreciated!