Promise相关知识M

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--
        1. 函数化编程
        2. 异步编程

        浏览器的一个软件  它的模型是多进程 多线程的!!
        浏览器中解析js的v8引擎 是单线程的
        而且在浏览器中 只有v8引擎有能力执行js代码

        队列:
    -->
</head>
<body>

</body>
<script>
    /*
    定时器的回调肯定是2000ms之后被塞入到异步队列中;
    可是这个事回调的执行 不一定是精确的2000ms钟
    肯定要比2000ms 来的长
    */

    setTimeout(()=>{
        console.log("setTimeout")
    },2000)

   // 浏览器的事件循环机制
</script>

回调函数

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--
        回调分两种:
            异步回调 是要被放进队列的
                定时器的回调就是一个异步回调
            同步回调 是不会被放进队列的
                数组api中回调都是同步回调
    -->
</head>
<body>

</body>
<script>

    var arr = ["a","b","c"]
    arr.forEach((item)=>{
        console.log(item)
    })
    console.log("-----")

</script>

<script>
    //回调函数 : 函数是你定义的 可是你没调用 最终它执行了
    // executor : 执行器; 执行器是一个同步的回调函数

    //在new Promise的时候 是先调用执行器 然后再返回实例对象
    //Promise的实例对象有三个状态 : pending resolved rejected


    //现在我们讨论的是 new Promise返回的实例
    var p = new Promise((resolve, reject)=>{
        //执行器中 如果都是同步代码  你就是在瞎用promise

        //定时器的执行 是同步的!!!!
        setTimeout(()=>{
            //异步代码!!!!!!
            resolve()
        },2000)
    })




</script>

<script>

   /* new Promise 返回的promise实例 它的状态跟执行器有关
        如果执行器函数的第一个参数被调用  返回的promise实例的状态会变成成功状态
        如果执行器函数的第二个参数被调用  返回的promise实例的状态会变成失败状态
        如果执行器在被调用的过程中出现了异常 返回的promise实例的状态会变成失败状态*/

    var p = new Promise((resolve, reject)=>{
        setTimeout(()=>{
            throw new Error("xxx")
        })
    })

   console.log(p);


</script>

<script>

    // promise实例的状态产生改变 有什么意义?

    /*
        var p = new Promise((resolve, reject)=>{
            setTimeout(()=>{
                resolve()
            },2000)
        })

        //p的状态产生改变时!!!  then两个回调中的一个是不是要被调用
        p.then(()=>{console.log("1")},()=>{console.log("2")})
    */

    var p = new Promise((resolve, reject)=>{
         resolve()
    })

    p.then(()=>{console.log("1")},()=>{console.log("2")})

    console.log(3)

</script>

<script>
    //当then方法被执行完毕之后返回的也是一个promise
    /*
        then方法返回的promise实例的状态 是如何确定的?


        如果你在使用then方法的时候 没有让then方法中回调返回一个promise
        那么 你也是在瞎使用promise!!!!
    */
    var p = new Promise((resolve, reject)=>{
         setTimeout(()=>{
             resolve()
         },2000)
    })
    p.then(()=>{
        return new Promise((resolve, reject)=>{
            setTimeout(()=>{
                console.log(1)
                resolve()
            },1000)
        })
    }).then(()=>{
        return new Promise((resolve, reject)=>{
            setTimeout(()=>{
                console.log(2)
                resolve()
            },1000)
        })
    })

    console.log(3)



</script>

<script>


    var p = new Promise((resolve, reject)=>{
        resolve()
    })

    p.then(()=>{console.log("1");throw new Error("----")})
     .then(()=>{console.log("2")})
     .then(()=>{console.log("3")})
     .then(()=>{console.log("4")})
     .then(()=>{console.log("5")})
     .then(()=>{console.log("6")})
     // .then(()=>{},()=>{console.log("处理异常")})
     .catch(()=>{console.log("处理异常");return Promise.reject()})
     .then(()=>{console.log("7")},()=>{console.log("------")})



</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值