【Vue】5 - promise、axios、created

1.回调函数

回调函数:将后续的处理逻辑传入到当前要做的事情中,当前事情结束后调用执行回调函数;

function cookie(callback) {
    setTimeout(() => {
        let food = '炒饭';   //执行完这个异步操作,在调用回调
        callback(food);
    }, 1000)
}

function eat(val) {
    console.log(`吃${val}`);

}
cookie(eat); 

2. Promise

  1. promise 有3个状态:成功态,失败态,等待态

  2. Promise 是一个定义好的原生自带的类(构造函数) ,给这个构造函数传一个参数(excutor-一个函数)
    当我们new的时候会立即调用执行这个函数excutor(立即执行!立即执行!)

  3. 默认是等待状态PENDING,立即执行后可能会变成成功态fulfilled,也可能会失败态rejected.

  4. 至于什么时候成功或什么时候失败,取决于我们,如果我们调用函数resolve()表示成功了(转向成功态),如果我们调用reject()表示失败了(转向失败态)

  5. resolve() 和 reject() 这两个函数也是promise给提供的,是excutor执行器的形参

  6. 一旦成功了就不会再失败,失败了就不会再成功

  7. promise实例都有一个 then 方法,then方法有两个参数(函数):如果我们再excutor里调resolve,就执行then里的第一个方法,掉reject就执行then里的第二个方法;
    –>也就是说: resolve 就是then里的第一个函数,reject 就是then里的第二个函数
    –>所以:resolve() 就是then里第一个函数执行,reject()执行就是then里第二个函数执行
    –>resolve(a)执行时里面的参数(实参-这是在调用),就是then里第一个函数里的形参(其实这是在定义函数,定义resolve)

这样的好处就是:不用我们自己传callback了,callback 定义写在then里
8.总结:
我们在new Promise的执行器里,执行逻辑(当前要做的事),可以在我们需要的时候掉成功方法resolve() 或 失败方法reject(),其实这个方法和我们之前写的callback 类似
而成功或失败后走的逻辑,我们在then里定义

let p = new Promise( (resolve,reject)=>{   //new后返回一个实例, 立即执行函数里有2个参数,分别在成功是调用/失败时调用
    setTimeout(()=>{   //类似一个异步
        let food ='炒饭';   //1s后执行这句,执行完后执行回调resolve()
        resolve(food);  //执行参数的时候传参
    },1000)   
})   

p.then(data=>{      
    console.log(data);   
},err=>{

})

3. axios的简单用法

axios 是ajax的库,这个库不依赖vue.js,他是基于promise的(在window上挂了个axios方法)

关于created:

  1. 专门用来发送ajax的方法, 数据初始化后自动调用created方法
  2. 而且方法里this也是指向vm实例,methods里面也是数据,也可以在这里 this.方法 取到
  3. 钩子函数,
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.css">
</head>
<body>
    <div id="app">   
     
    </div>
    <script src="node_modules/axios/dist/axios.js"></script>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        /* 
        保证地址使用localhost,而不是本地C盘D盘什么的,本地不支持ajax,且可能有跨域问题
        */
    let vm = new Vue({ 
        el:'#app',
        created(){  
            /* created:
            1. 专门用来发送ajax的方法, 数据初始化后自动调用created方法
            2. 而且方法里this也是指向vm实例,methods里面也是数据,也可以在这里 this.方法 取到 
            3. 钩子函数,
            */

            // axios 是ajax的库,这个库不依赖vue.js,他是基于promise的
            // 在window上挂了个axios方法

            axios.get('./carts.json').then((res) => {  //成功的回调,limian
                console.log(res.data);
               /*  
                1.在created里this 指向vm实例
                2.回调函数中的this都指向window ,这里我们赋值是给实例
                3.所以我们改用箭头函数,箭头函数没有this 向上一级找,上一级指向实例,所以这里this就指向实例 */
                this.lists = res.data;
            },(err) => {   //失败的回调
                 console.log(err);
                 
            })

        },
        data:{   
           /* 
             一般我们的数据都是在json里取的,把这些放到json里,但json里直接粘报错,
            因为如下格式是对象,对象里不需要加 "双引号" ,但json里需要加双引号.
            我们可以在浏览器控制台使用方法 JSON.stringify(对象格式数据) 回车得到"json格式数据",注意取数据的时候[]外层的双引号不要
            */
           /*  lists:[
                {
                    name:'颈椎病康复指南',
                    isSelected:true,
                    price:18.8,
                    num:3,
                    img:'//img13.360buyimg.com/mobilecms/s144x144_jfs/t1/97280/10/11147/131201/5e2c27e0E0067fae3/e4447f345e5ce5e0.jpg',
                    info:'出版方:蓝翔技校'
                }
            ] */

            lists:[],   
        }, 
        methods:{  

        }
    })
    </script>
</body>
</html>
发布了57 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Eva3288/article/details/104235545