美文网首页
2020-05-06--Vue之前后端交互6-async,awa

2020-05-06--Vue之前后端交互6-async,awa

作者: program_white | 来源:发表于2020-05-06 17:08 被阅读0次

async,await

  • async:‘异步’
  • await:‘等待’

async作为一个关键字放到函数前面

  • 任何一个async函数都会隐式返回一个promise

await关键字只能在使用async定义的函数中使用

  • await后面可以直接跟一个 Promise实例对象
  • await函数不能单独使用
    async/await 让异步代码看起来、表现起来更像同步代码

基本使用

 <script>
         async function queryData() {
      // 1.2 await关键字只能在使用async定义的函数中使用,await后面可以直接跟一个 Promise实例对象
            var ret = await new Promise(function(resolve, reject){
                setTimeout(function(){
                    console.log('timeout')
                    resolve('nihao')
                },5000);
            })
            console.log('hahaha')
      return ret;
    }
    queryData().then(function(data){
        console.log('then')
        console.log(data)
    })
    console.log('finish')
    </script>

由于异步函数和Promise之前加了await关键字,所以,在调用函数时,先输出的只有finish(异步),其他的都要等待。


如果不加async和await关键字:

结果为:


async 函数处理多个异步函数

之前使用的axios.get().then()的写法也可以改为:

  <script>
        //设置请求头
        axios.defaults.baseURL = 'http://localhost:5000';

        async function queryData() {
            
            // 2.1  添加await之后 当前的await 返回结果之后才会执行后面的代码   
            var info = await axios.get('/get_news');
            //2.2  让异步代码看起来、表现起来更像同步代码
            console.log('hello')
            console.log(info)
            console.log(info.data)
        
        }

        queryData()
    </script>

运行:



当我们要通过axios访问多个服务器接口时,并且还要前后有联系:
比如:当访问购物车中商品的数量后,根据数量再传给后台进行相应操作。这样两个axios就有了联系,这时候可以使用async函数和await关键字,使用异步等待进行访问。

  <script>
        //设置请求头
        axios.defaults.baseURL = 'http://localhost:5000';

        async function queryData() {
            
            // 2.1  添加await之后 当前的await 返回结果之后才会执行后面的代码   
            var info = await axios.get('/get_news');
            //2.2  让异步代码看起来、表现起来更像同步代码
            console.log('hello')
            console.log(info)
            console.log(info.data)

            var ret = await axios.get('/get_comment');
            console.log(ret.data)
        
        }

        queryData()

运行:
这个不错的字符串出现的稍晚于上边的数据。这就是await的作用。


这也就是对之前的axios.get().then()代码的改写,让代码看起来不想像异步。

  • 以前的axios要得到结果要使用then(函数)回调函数得到数据,用多了还是会有回调地狱,
  • 那么加上async awit关键字,就相当于等待axios请求回应后,通过之前的回调函数的返回值(更底层一点就是Promise对象的resolve函数)拿到数据。那么就可以不适用then方法得到返回的数据。

然而上边的异步函数没有写返回值,那么在函数最后把数据返回

return ret.data

通过调用函数:
ret.data是字符串,但是在async的作用下,把ret.data转换为Promise对象。
queryData()返回的是Promise对象,Promise对象再调用then()可以拿到其中的数据。

queryData().then(function(data){
            console.log(data)
        })

也可以再使用async和await封装为一个异步函数进行调用。


相关文章

  • 2020-05-06--Vue之前后端交互6-async,awa

    async,await async:‘异步’ await:‘等待’ async作为一个关键字放到函数前面 任何一个...

  • Vue项目使用WebSocket技术

    【基础】为什么使用WebSocket? 前端和后端的交互模式最常见的就是前端发数据请求,后端响应传输数据之前端进行...

  • 前后端交互如何保证安全性?

    前言 web与后端,andorid与后端,ios与后端,像这种类型的交互其实就属于典型的前端与后端进行交互。在与B...

  • 前后端交互完成的新学期最有收获感的一周

      本周,我们的商城项目进入了前后端交互,而且前后端交互也已经完成,ajax和thymeleaf交互模板也已经实现...

  • HTTP协议、存储、Ajax

    前后端数据交互与 HTTP 协议 1、前后端通信是什么(1)前端和后端交互的过程(2)浏览器和服务器之间数据交互的...

  • Vue(3)

    前后端交互 前后端交互模式 Promise用法 接口调用-fetch用法 接口调用-async/await用法 接...

  • JSON工具类的构建(前端版本)

    前言 在前后端交互的选择上,之前一直采用的是模板引擎(因为我只负责后端)。而这次的一个算是作业吧,前后端都是我,所...

  • JSON工具类的构建(后端版本)

    前言 在前后端交互的选择上,之前一直采用的是模板引擎(因为我只负责后端)。而这次的一个算是作业吧,前后端都是我,所...

  • 2018-02-08

    前端与后端的数据交互 前端与后端的数据交互,最常用的就是GET、POST,比较常用的用法是:提交表单数据到后端,后...

  • SpringBoot学习随笔

    React前端和Spring boot后端的交互整合 前后端接口交互整合,可以通过spring boot的thym...

网友评论

      本文标题:2020-05-06--Vue之前后端交互6-async,awa

      本文链接:https://www.haomeiwen.com/subject/iacwghtx.html