Create a delay effect in Vuex's action function

I am currently developing a Vue application for the backend and I want to introduce an artificial delay to actions. For example, when I submit a sign in request, I would like to add a 1-second delay before redirecting to the main application.

This is the submit method within the component:

onSubmit() {
  this.loading = true;
  this.$store.dispatch('auth/signIn', this.credentials).then(() => {
    this.loading = false;
  });
}

Here is the signIn method from the action:

  async signIn({ commit }, credentials) {
    const result = await authService.signIn(credentials);
    await commit(AUTHENTICATE, {
      authenticated: result
    });
  }

However, I encountered an issue with the authService method as it returns undefined. Here's the block of code that is causing the problem:

  async signIn(credentials) {
    setTimeout(() => {
      console.log('credentials', credentials);
      return true;
    }, 2000);
  }

Could someone assist me in resolving this issue?

Answer №1

I implemented a delay function using the code below. For more details, please refer to the main.js file at

customSleep(delay) {
        return new Promise(resolve => setTimeout(resolve, delay));
  }

Answer №2

Your signIn method does not return anything and setTimeout does not halt the code execution.

For a blocking timeout, I recommend creating a delay() function like this:

function delay(time = 2500) {
  return new Promise((resolve) => {
    setTimeout(resolve, time)
  })
}

By default, it will wait for 2.5 seconds.

You can view a live example in vanilla JS here

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Navigating multi-level drop-down menus on touch devices can be tricky, but there are ways to effectively

I recently created a website using HTML and CSS with a three-level navigation menu that worked perfectly on desktop. However, the issue arises when users access the site from touch devices like smartphones or tablets because the sub-menu does not appear wh ...

The website code lacks a dynamically generated <div> element

When using jQuery to dynamically add content to a "div" element, the content is visible in the DOM but not in the view page source. For example: <div id="pdf"></div> $("#btn").click(function(){ $("#pdf").html("ffff"); }); How can I ensur ...

Encountering the error message "{error: 'Operation `users.findOne()` buffering timed out after 10000ms'}" while trying to access my app on localhost

In my project, I have organized my code into 'client' and 'server' folders. The server side of the application is built using Express and successfully connected to a MongoDB database in the server folder using nodemon. https://i.sstati ...

Adjust the text color based on the background image or color

Here on this site, I have designed the first div to display a dark image, while the second one shows a light background. I am aiming to adjust the sidebar text color based on whether it is displayed against the dark or light background. How can I achieve ...

Utilizing dual identifiers in a Jquery plugin

I am currently working with a jQuery plugin and I need to apply the same functionality to two different IDs. How can I achieve this? It involves a next and previous functionality where clicking on the next button automatically scrolls both divs. The issu ...

What could be causing the HTML page to scroll up when the datepicker is initialized in JavaScript?

Wondering about a strange issue with my HTML page built using Laravel Blade. Whenever the date picker is initialized in JavaScript, the HTML page unexpectedly scrolls up. Here's the code snippet located at the bottom of the page: <script type=" ...

Encountered an Error While Compiling GeoJson File in Vue

I'm a beginner with Vue.js and I am trying to create a GIS application using Webpack+Vue with a GeoJSON file as the basemap. However, when I attempt to compile it, I encounter the following error message: Module parse failed: Unexpected token (2:6) ...

Filtering an Array of Objects on the Fly in Vue.js

I'm currently working on a Vue.js app where I need to dynamically apply filter values to an Array of objects based on their field values. Each object in the Array has various fields that I want to filter by. The challenge is that each field can have m ...

How can we display a different navbar based on whether the user is logged in or not?

Can anyone share the most effective methods for displaying a different navbar based on whether or not a user is logged in? I have considered a few approaches: One option might involve creating two separate navbars in the HTML file and using CSS to tog ...

Enhancing the Calculator Functionality in a React Program

I'm struggling to incorporate a reset button into the input field, similar to CE on a calculator. I'm facing challenges when it comes to integrating it within the existing code structure. import { useRef } from "react"; import './A ...

Sign out the user if the API response is a 401 error

Does anyone know how to properly handle logging out a user when the response code is 401 in axios interceptors without triggering the catch block in the main axios call? For example, if a user tries to create a post and receives an unauthorized error mess ...

The ongoing ESLint conundrum: Balancing between "Unused variable" and "Unknown type" errors when utilizing imports for type annotations

I've encountered a linting issue and I need some guidance on how to resolve it. Here's the scenario - when running $ yarn lint -v yarn run v1.22.4 $ eslint . -v v6.8.0 With plugins vue and @typescript-eslint, I have the following code in a .ts ...

The issue with jqTransform not displaying the select box value on a hidden contact form

Could really use some assistance here and apologize if it's a hassle: Link to contact form To view the contact form, simply click the "Contact" button in the top left corner. The jqTransform jQuery plugin is being used to style it. Initially, it&apo ...

Looking for a way to execute MySQL queries using promises in Protractor?

Is there a way to query a MySQL database using promises in Protractor? I have multiple queries that I need to execute during test execution, but my `executeSelectQuery` function always runs at the beginning of the test. How can I ensure it executes at the ...

Transmitting multiple file attachments to a PHP file through AJAX

In my form, I have the following HTML code: <input type="file" id="attachments" name="attachments" multiple> I've already implemented a JavaScript function that handles form submission using AJAX, but it doesn't handle uploaded files. Wi ...

Tips for capturing everything in NextJs with getStaticPaths

My current challenge involves utilizing getStaticProps and getStaticPaths to dynamically generate pages at build time. This is my first experience working with CatchAll routes, so I embarked on a search for solutions. Unfortunately, none of the results al ...

Enhancing Angular input validators with updates

Working on a project with Angular 6, I have set up an input field using mat-input from the Angular Material framework and assigned it an id for FormGroup validation. However, when I initialize my TypeScript class and update the input value, the validator d ...

Unseen cells and sift through information in datatables

I encountered an issue with the data table while trying to display data from a database using AJAX and applying filters through a PHP file. The initial setup works smoothly, however, I faced a problem after implementing a column hiding feature which caus ...

Unable to import CSV file

I'm currently in the process of developing a CSV editor that involves importing a CSV file and converting it into HTML tables. Below is the code I have been working on: <html> <head> <title></title> </head> <body& ...

Guide to creating unit tests for document.URL in Angular 5 specifications

Currently attempting to simulate document.URL = 'dashboard'; however, encountering an issue where it states that I can't assign to url because its readonly property. This problem arose while writing jasmine test cases click here for image de ...