vue-promise-axios

1 回调函数

1.1 回调函数定义:

① 函数是不是你定义的 你定义的

② 函数你要有没有调用 你没调用

③ 最终函数有没有被执行 最终执行了

1.2 回调函数分类:

同步的回调:数组api中的回调函数基本都是同步的;promise的执行器是同步的

异步的回调:定时器的回调 dom事件的回调 ajax请求的回调

遇到异步回调函数需注意以下两点:

① 回调什么时候进队列

② 回调什么时候被执行

内存结构:堆 栈 队列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2zfZO7rw-1626050796268)(D:\class\vue\02-vue\code\day07(axios)]\01_异步&单线程\定时器\事件循环模型.png)

//最快一秒钟同时输出5个5   
for (var i 0; i < 5; i++){
   
	setTimeout(function() {
   
		console.log(i)   55555
	},1000)
}
//...耗时的操作

2 变量的查找规则

  • js中的作用域就是函数作用域!

  • 变量的查找基于作用域链

变量的查找规则:

① 左查询(变量出现在等号的左边使用左查询的规则进行变量查找)

​ 如果整条作用域链中 都没有对应变量的声明 则v8会默认在顶层作用域声明一份

② 右查询(变量出现在等号的非左边使用右查询的规则进行变量查找)

​ 如果整条作用域链中 都没有对应变量的声明 则v8会报错

function wrap(){
   
        function inner(){
   
            a = 1;
            console.log(a,"inner")
        }
        inner()
    } 
 wrap()
 console.log(a,"全局")  //1 inner 1 全局

3 Promis实例

3.1 Promise最佳实践

① promise实例是一次性的,一个promise实例实例只能使用一次

② promise构造函数的执行器必须有异步代码,应该在异步对应的回调来合理的调用resolve reject

③ then方法中回调的返回值一般是一个新的promise

3.2 promise重点

① promise的实例对象三种状态是如何切换的 (成功 失败 初始化)

② promise的实例持有值为多少

当通过new Promise创造出来的promise实例; 他状态的改变以及持有的值 都跟执行器有关,new Promise时 执行器先执行 再返回promise实例。

执行器的返回值会被忽略

  • 如果执行器中什么都没有发生,创建出来的promise实例则是初始化状态,持有值是undefined
  • 如果执行器中resolve被调用,创建出来的实例是成功状态,持有的值是resolve函数第一个参数
  • 如果执行器中reject被调用,创建出来的实例是失败状态,持有的值是reject函数第一个参数
  • 如果执行器中发生异常,创建出来的promise实例是失败状态,持有的值是失败原因
    let promsie = new Promise((resolve, reject)=>{
   
        // 执行器内部的resolve, reject一定要放在一个异步环境下调用!!!
        setTimeout(()=>{
   
            resolve()
        },2000)
    })

promise是一个状态机,在promise状态改变时, 可以决定其then方法中的两个参数什么时候进队列,谁进队列。

then方法有两个参数是两个回调,这两个回调中的一个回调最终是要进队列的,至于是哪一个回调什么时候进队列取决用这个then方法的promise对象的状态什么时候发生改变,改变成什么状态

//此处代表执行时,promise处于初始化状态
let promise = promise.then(() =>{
   },()=>{
   })

then方法返回一个新的Promise,而它的行为与then中的回调函数的返回值有关:

  • 如果then中的回调函数返回一个值,那么then返回的Promise将会成为成功状态,promise持有的值就是该返回值。

  • 如果then中的回调函数返回一个Promise,那么then返回的Promise会继承他的状态和值

  • 如果then中的回调函数抛出一个错误,那么then返回的Promise将会成为失败状态,promise持有的值就是错误原因

    //此处代表执行时,promise处于初始化状态
    promise.then(()=>{
         },()=>{
         })
    

4 promise面试题

    // 输出: 1 2 10 5 6 8 9 3

    //p2 创建完就是成功状态 持有的值为5
    //p1 创建完就是成功状态 持有的值为6
    //p3 创建完就是成功状态 持有的值为9

    const p1 = () => (new Promise((resolve, reject) => {
   
        console.log(1);
        let p2 = new Promise((resolve, reject) => {
   
            console.log(2);
            const timeOut1 = setTimeout(() => {
   
                console.log(3);
                resolve(4);
            }, 0)
            resolve(5);
        });
        resolve(6);
        p2.then((arg) => {
   
            console.log(arg);
        });
    }));

    const timeOut2 = setTimeout(() => {
   
        console.log(8);
        const p3 = new Promise(reject => {
   
            reject(9);
        }).then(res => {
   
            console.log(res)
        })
    }, 0)


    p1().then((arg) => {
   
        console.log(arg);
    });
    console.log(10);

5 async&await

async函数返回一个新的promise,而他的行为与async函数的代码体有关

  • 如果async函数代码体返回一个值,那么async函数返回的promise将会成为成功状态,promise持有的值就是该返回值
  • 如果async函数代码体返回一个promise,那么async函数返回的promise与当前代码体返回的promise一致
  • 如果async函数代码体抛出一个错误,那么async函数返回的promise将会成为失败状态,promise的值就是错误原因
//await等于一个promise,当等待的promise状态明确之后,async函数才会继续往下执行
 (async function(){
   
        try {
   
            const {
   data:{
   items}} = await axios.get
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值