Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

How To Wait In JavaScript

As a beginner in programming, you might have come across situations where you need to wait for a certain amount of time before executing a piece of code in JavaScript. This can be useful in a variety of scenarios, such as waiting for an API response, delaying an animation, or simply simulating a delay for a better user experience.

In this blog post, we will explore different ways to "wait" in JavaScript, covering:

  1. The setTimeout function
  2. The setInterval function
  3. Using Promises with setTimeout
  4. The async and await keywords

Let's dive in!

1. The setTimeout function

The setTimeout function is a built-in method in JavaScript that allows us to execute a function after a specified time delay. The function takes two arguments: the function to be executed and the delay in milliseconds.

Here's the basic syntax for using setTimeout:

setTimeout(functionToExecute, delayInMilliseconds);

For example, let's say we want to display a message after waiting for 3 seconds. We can use setTimeout like this:

function showMessage() {
  console.log("Hello, I waited for 3 seconds!");
}

setTimeout(showMessage, 3000);

In this example, the showMessage function will be executed after a delay of 3,000 milliseconds (3 seconds).

We can also pass arguments to the function we want to execute using setTimeout. Let's say we want to display a custom message after waiting for 3 seconds. We can modify our previous example like this:

function showMessage(message) {
  console.log(message);
}

setTimeout(showMessage, 3000, "Hello, I waited for 3 seconds with a custom message!");

2. The setInterval function

The setInterval function is another built-in method in JavaScript that allows us to repeatedly execute a function after a specified time interval. The function takes two arguments: the function to be executed and the interval in milliseconds.

Here's the basic syntax for using setInterval:

setInterval(functionToExecute, intervalInMilliseconds);

For example, let's say we want to display a message every 2 seconds. We can use setInterval like this:

function showMessage() {
  console.log("Hello, I am being displayed every 2 seconds!");
}

setInterval(showMessage, 2000);

In this example, the showMessage function will be executed every 2,000 milliseconds (2 seconds).

To stop the repeated execution of the function, we can use the clearInterval function. We need to pass the identifier returned by setInterval to clearInterval to stop the interval.

Here's an example that stops the repeated execution after 10 seconds:

function showMessage() {
  console.log("Hello, I am being displayed every 2 seconds!");
}

let intervalId = setInterval(showMessage, 2000);

setTimeout(() => {
  clearInterval(intervalId);
  console.log("Stopped the interval!");
}, 10000);

3. Using Promises with setTimeout

Promises are a modern way of handling asynchronous operations in JavaScript. A Promise represents a value that may not be available yet but will be at some point in the future. We can use Promises with setTimeout to wait for a certain amount of time before resolving the Promise.

Here's an example of a function that returns a Promise that resolves after a specified delay:

function wait(delayInMilliseconds) {
  return new Promise((resolve) => {
    setTimeout(resolve, delayInMilliseconds);
  });
}

wait(3000).then(() => {
  console.log("Hello, I waited for 3 seconds using a Promise!");
});

In this example, the wait function returns a Promise that resolves after a delay of 3,000 milliseconds (3 seconds). The then method is called when the Promise is resolved, and we display the message inside the then method.

4. The async and await keywords

The async and await keywords provide a more elegant way of working with Promises and asynchronous code in general. They allow us to write asynchronous code in a more synchronous (linear) fashion, which can make the code easier to read and understand.

To use the await keyword, we need to mark the function containing it as async. The await keyword can only be used inside an async function.

Here's an example of how we can use async and await with our wait function from the previous section:

async function executeAfterDelay() {
  console.log("Starting...");
  await wait(3000);
  console.log("Hello, I waited for 3 seconds using async and await!");
}

executeAfterDelay();

In this example, we define an async function called executeAfterDelay. Inside this function, we use the await keyword to wait for the Promise returned by the wait function to resolve. The console.log statement after the await keyword will only be executed after the Promise has resolved.

This approach is particularly useful when we need to wait for multiple asynchronous operations in a specific order. For example, imagine we want to wait for 2 seconds, then make an API request, and finally wait for another 3 seconds before displaying a message. Using async and await can make this code easier to write and understand:

async function makeApiRequest() {
  // Simulate an API request that takes 1 second to complete
  await wait(1000);
  return "API request completed!";
}

async function executeInOrder() {
  console.log("Starting...");
  await wait(2000);
  console.log("Waited for 2 seconds!");

  const apiResponse = await makeApiRequest();
  console.log(apiResponse);

  await wait(3000);
  console.log("Waited for another 3 seconds, done!");
}

executeInOrder();

In this example, we use await to wait for each asynchronous operation to complete before moving on to the next one. This makes the code appear more linear and easier to understand, even though the operations are still being executed asynchronously.

To wrap up, waiting in JavaScript can be achieved in multiple ways, including using setTimeout, setInterval, Promises, and the async and await keywords. Each method has its own benefits and use cases, and understanding how to use them effectively will greatly improve your programming skills and the quality of your code. Happy waiting!