返回

利用Promise和timeout实现Vue定时请求数据

前端

在Vue项目中,我们需要编写一个定时请求数据的方法,每隔10秒请求一次数据。如果返回的数据小于或等于4,则调用Promise的失败回调函数reject,并输出返回的结果。如果返回的数据大于4且小于11,则调用Promise的成功回调函数resolve,并输出返回的结果。

实现这个功能需要以下步骤:

  1. 创建一个Vue组件,并定义一个data()函数,用于存储数据。
  2. 在组件的created()生命周期钩子中,使用setTimeout函数创建一个定时器,每隔10秒请求一次数据。
  3. 在定时器中,使用Promise函数发出请求,并使用then()方法添加两个回调函数:一个是resolve,一个是reject。
  4. 在resolve回调函数中,如果返回的数据大于4且小于11,则输出返回的结果。
  5. 在reject回调函数中,如果返回的数据小于或等于4,则输出返回的结果。

以下是详细的代码实现:

<template>
  <div id="app">
    <h1>定时请求数据</h1>
    <p>数据:{{ data }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      data: null
    }
  },
  created() {
    this.getData()
  },
  methods: {
    getData() {
      setTimeout(() => {
        // 发出请求
        const promise = new Promise((resolve, reject) => {
          // 模拟请求过程
          setTimeout(() => {
            // 模拟返回数据
            const data = Math.random() * 10

            // 根据返回数据的值,调用不同的回调函数
            if (data <= 4) {
              reject(data)
            } else if (data > 4 && data < 11) {
              resolve(data)
            }
          }, 1000)
        })

        // then()方法添加两个回调函数
        promise.then(
          (data) => {
            // resolve回调函数
            this.data = data
          },
          (data) => {
            // reject回调函数
            this.data = data
          }
        )
      }, 10000) // 定时器每隔10秒执行一次
    }
  }
}
</script>

在上述代码中,我们首先定义了一个Vue组件,并在data()函数中定义了一个data变量,用于存储返回的数据。

然后,在组件的created()生命周期钩子中,我们创建了一个定时器,每隔10秒执行一次getData()方法。

在getData()方法中,我们使用Promise函数发出请求,并使用then()方法添加两个回调函数:一个是resolve,一个是reject。

在resolve回调函数中,如果返回的数据大于4且小于11,则将返回的数据输出到data变量。

在reject回调函数中,如果返回的数据小于或等于4,则将返回的数据输出到data变量。

最后,在模板中,我们使用插值表达式将data变量的值输出到页面上。

这样,我们就完成了在Vue中使用Promise和timeout函数创建定时请求数据的方法。