指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

async/await场景: 这是一个用同步的思维来解决异步问题的方案,当前端接口调用需要等到接口返回值以后渲染页面时。

async async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行,async 函数返回的是一个promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

await await的含义为等待。意思就是代码需要等待await后面的函数运行完并且有了返回结果之后,才继续执行下面的代码。这正是同步的效果。

data() {
    return {
        topicList: []
    }
},
created() {
    this.getTopicList()
    console.log(this.topicList)
},
methods: {
    async getTopicList() {
      let resp = await axios.get(`/topic`)
      if (resp.data.status === 1) {
        this.topicList = resp.data.data.data
      }
    }
}

可以看到打印出来的是空数组。因为这时候调用接口返回的数据还没有被赋值。

修改如下,添加await:
data() {
    return {
        topicList: []
    }
},
async created() {
    await this.getTopicList()
    console.log(this.topicList)
},
methods: {
    async getTopicList() {
      let resp = await axios.get(`/topic`)
      if (resp.data.status === 1) {
        this.topicList = resp.data.data.data
      }
    }
}

刷新页面,可以看到打印出来的是已经被赋值的数组。

但是这种写法,不适合Nuxt3,在nuxt3下 是不能在created 前使用async的,会报错,提示nuxt实例不存在,但是可以在methods 方法前使用,比如:

<template>

<button @click="getTopicList">获取</button>

</template>


methods: {
    getTopicList() {
        await this.getData(); // 前面一定要加 await 否则下面的this.status 获取不到想要的数据
      //等待 this.status 有结果再执行其它操作
      if(this.status == 1){
      
      }
      
    },
    
    async getData(){
        let resp = await axios.get(`/topic`)
          if (resp.data.code === 0) {
            this.status = resp.data.data.status
          }
    }
}