Complete example of vue polling request solution

Complete example of vue polling request solution

Understanding of polling

In fact, the focus of polling is on the interval between executions, not the loop itself. Ajax is an asynchronous request, from initiating the request to receiving the response is a complete process. The time required for this process is unpredictable. To put it in an extreme point, if the time required for the request exceeds our polling interval, many problems will arise. Therefore, the polling interval should be based on ensuring that the request process is completed, which is more logical.

Business Description:

  1. The page is initialized to display the first page of data, and then the current page data is refreshed every ten seconds
  2. Change the filter conditions or change the page number to refresh the data directly, and then refresh the current data every ten seconds

Business logic point analysis:

  1. When manually called, the request is executed immediately
  2. Then execute it every ten seconds to refresh the list

Implementation ideas

  1. Call the request directly
  2. Set the timer setTimeout in the successful callback function of the request
  3. Repeat 1.2 steps within the timer.
  4. Encapsulate steps 1.2.3 into a recursive function
// Polling method polling (page) {
      this.getWorks(page).then(res => {
        this.pollingST = setTimeout(() => {
          clearTimeout(this.pollingST)
          this.polling(page)
        }, 10000)
      })
    }

Why not use setInterval

The function of setInterval seems to be a perfect match for the concept of polling. If our operation is synchronous code, then there is no problem in using setInterval. The problem is that setInterval is not flexible enough and we cannot know whether the last request has been completed. So setTimeout would be better.

Things to note

In the polling, I recorded the timer with the pollingST variable. The previous timer must be cleared before each execution. Because the recursive call is inside the timer, it is very convenient to end the polling by clearing the timer.

Complete pseudo code

<script>
export default {
  data () {
    return {
      pollingST: null
    }
  },
  methods: {
    // Paging change event pageChange (params) {
      // Clear the existing timer clearTimeout(this.pollingST)
      //Call polling this.polling(params)
    },
    // Request interface method getWorks() {
      return new Promise(resolve => resolve({}))
    },
    // Polling method polling (params) {
      this.getWorks(params).then(res => {
        this.pollingST = setTimeout(() => {
          clearTimeout(this.pollingST)
          this.polling(params)
        }, 10000)
      })
    }
  },
  created () {
    // Call polling this.polling({ page: 1, pageSize: 5 })
  },
  destroyed () {
    clearTimeout(this.pollingST)
  }
}
</script>

Summarize

This is the end of this article about the vue polling solution. For more relevant vue polling solutions, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Vue uses polling to send request code regularly

<<:  Alibaba Cloud Ubuntu 16.04 builds IPSec service

>>:  Example of how to implement MySQL cascading replication

Recommend

How to solve the abnormal error ERROR: 2002 in mysql

Recently, an error occurred while starting MySQL....

In-depth discussion on auto-increment primary keys in MySQL

Table of contents Features Preservation strategy ...

Detailed explanation of jQuery method attributes

Table of contents 1. Introduction to jQuery 2. jQ...

CSS sample code to achieve circular gradient progress bar effect

Implementation ideas The outermost is a big circl...

A brief discussion on three methods of asynchronous replication in MySQL 8.0

In this experiment, we configure MySQL standard a...

CSS implements six adaptive two-column layout methods

HTML structure <body> <div class="w...

Add crontab scheduled tasks to debian docker container

Now most of the Docker images are based on Debian...

Detailed description of mysql replace into usage

The replace statement is generally similar to ins...

MySQL database transaction example tutorial

Table of contents 1. What is a transaction? 2. Th...

Issues and precautions about setting maxPostSize for Tomcat

1. Why set maxPostSize? The tomcat container has ...

Example of using negative margin to achieve average layout in CSS

For evenly distributed layouts, we generally use ...

JS implements random roll call system

Use JS to implement a random roll call system for...

HTML Table Tag Tutorial (47): Nested Tables

<br />In the page, typesetting is achieved b...

Understanding Nginx Current Limitation in One Article (Simple Implementation)

Nginx is now one of the most popular load balance...