axios简介

128 阅读4分钟

回调函数的概念

这里与普通的函数进行对比

普通函数指的是正常调用的函数,一般函数执行完毕后才会继续执行下一行代码 而回调函数指的是一些特殊的函数,表示未来才会执行的一些功能,后续代码不会等待该函数执行完毕就开始执行了

使用promise构建回调函数

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise对象。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就不会再变了,会一直保持这个结果。

promise的使用

 <script>
        
       /*  
        1.实例化promise对象,并且执行(类似Java创建线程对象,并且start)
        状态: promise有三个状态
                pending   正在运行
                resolved  内部调用了resolve方法
                rejected  内部调用了reject方法
        参数: 在第二步回调函数中就可以获取对应的结果 
        */
        let promise =new Promise(function(resolve,reject){
            console.log("promise do some code ... ...")
          
            reject("promise fail")
        })
        console.log('other code1111 invoked')
        //获取回调函数结果  then在这里会等待promise中的运行结果,但是不会阻塞代码继续运行
        promise.then(
            function(value){console.log(`promise中执行了resolve:${value}`)},
            function(error){console.log(`promise中执行了reject:${error}`)}
        )
        // 3 其他代码执行   
        console.log('other code2222 invoked')
    </script>

注意:promise.then中的两个函数对应着两种状态,前者在成功时执行,后者则是在结果为失败的时候执行,结果为失败的情况也可以替换为promise.catch().

使用async和await简化代码

代码演示如下:

       
    	async function fun1(){
   
            let promise = Promise.reject("heihei")
            return promise
        }

        let promise =fun1()

        promise.then(
            function(value){
                console.log("success:"+value)
            }
        ).catch(
            function(value){
                console.log("fail:"+value)
            }
        )
</script>

解释:async 用于标识函数的

1, async标识函数后,async函数的返回值会变成一个promise对象

  1. 如果函数内部返回的数据是一个非promise对象,async函数的结果会返回一个成功状态 promise对象

  2. 如果函数内部返回的是一个promise对象,则async函数返回的状态与结果由该对象决定

  3. 如果函数内部抛出的是一个异常,则async函数返回的是一个失败的promise对

<script>
    /* 
            1. await右侧的表达式一般为一个promise对象,但是也可以是一个其他值
            2. 如果表达式是promise对象,await返回的是promise成功的值
            3. await会等右边的promise对象执行结束,然后再获取结果,后续代码也会等待await的执行
            4. 如果表达式是其他值,则直接返回该值
            5. await必须在async函数中,但是async函数中可以没有await
            6. 如果await右边的promise失败了,就会抛出异常,可以通过 try ... catch捕获处理
        */

		async function fun1(){
            return 10
        
        }

        async function fun2(){
            try{
                
                let res = await fun1()
                //let res = await Promise.reject("something wrong")
            }catch(e){
                console.log("catch got:"+e)   
            }
            
            console.log("await got:"+res)
        }

        fun2()
</script>

说明:

  1. await右侧的表达式一般为一个promise对象,但是也可以是一个其他值

  2. 如果表达式是promise对象,await返回的是promise成功的值

  3. await会等右边的promise对象执行结束,然后再获取结果,后续代码也会等待await的执行

  4. 如果表达式是其他值,则直接返回该值

  5. await必须在async函数中,但是async函数中可以没有await

  6. 如果await右边的promise失败了,就会抛出异常,可以通过 try ... catch捕获处理

axios的简介

axios解决了使用原生js代码实现异步ajax发请求代码量大的问题,将原生的js代码封装为了一个个的api供我们调用

  • Axios 是一个基于 promise 网络请求库,作用于node.js和浏览器中。 在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。它有如下特性

    • 从浏览器创建 XMLHttpRequests

    • 从 node.js 创建 http 请求

    • 支持 Promise API

    • 拦截请求和响应

    • 转换请求和响应数据

    • 取消请求

    • 自动转换JSON数据