Promise的基础知识

===============================================================================================
Promise的注意事项:
1、当出现回调地狱的时候,最好使用promise,它是一种链式编程,有利于提高代码的可读性,当使用普通嵌套是会到时代码层级不清晰
2、resolve解决,reject拒绝,它们两个不仅是作为参数传进去new Promise,同时也是一个函数
3、resolve(data)被调用时会执行 then((从resolve传进来的data)=>{ 处理函数 })
reject(err)被调用时会执行 catch((从reject传进来的err)=>{ 处理代码 })
4、上面是异步请求代码例如:setTimeout(()=>{ 内容 },1000)
下面是处理代码例如:console.log(data)
在这里插入图片描述
在这里插入图片描述

5、直接用then将两个执行处理代码的函数包起来:
在这里插入图片描述


promise的链式调用:

<body>
    <!-- <script>
        //常规写法
        new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve('aaa')         
            },1000)
            
        }).then((temp)=>{
                console.log(temp,'第一层处理')

               return new Promise((resolve)=>{
                    resolve(temp+'1111')
                })

            }).then((temp)=>{
                console.log(temp,'第二层处理')

              return  new Promise((resolve,reject)=>{
                    resolve(temp+'aaa')
                    // reject('err massage')
                })

            }).then((temp)=>{
                console.log(temp,'第三层处理')
            }).catch((err)=>{
                console.log(err)
            })
       
    </script> -->
    (三选一)
     <script>
         //简化写法
        new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve('aaa')         
            },1000)
        }).then((temp)=>{
                console.log(temp,'第一层处理')
               return Promise.resolve(temp+'1111')
            }).then((temp)=>{
                console.log(temp,'第二层处理')
                // throw 'error message'//手动抛出异常
                // return Promise.reject('error message')//通过promise中的reject抛出异常
              return  Promise.resolve(temp+'3333')//接收数据
            }).then((temp)=>{//resolve调用这个函数
                console.log(temp,'第三层处理')
            }).catch((err)=>{//reject和throw调用这个函数
                console.log(err)
            })
       
    </script>
    (三选一)
     <script>
         //超级简化写法
        new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve('aaa')         
            },1000)
        }).then((temp)=>{
                console.log(temp,'第一层处理')
               return temp+'1111'//直接返回数据默认是fulfill(满足状态)
            }).then((temp)=>{
                console.log(temp,'第二层处理')
                // throw 'error message'//手动抛出异常
                // return Promise.reject('error message')//通过promise中的reject抛出异常
              return  temp+'3333'//接收数据
            }).then((temp)=>{//resolve调用这个函数
                console.log(temp,'第三层处理')
            }).catch((err)=>{//reject和throw调用这个函数
                console.log(err)
            })
       
    </script>
</body>

promise.all()的用法:
用于需要同时传回数据再执行其他程序
网络请求是不确定返回顺序的

在这里插入图片描述

把$ajax用setTimeout替换来模拟异步请求:
1、Promise.all{[里面是一个数组]},到时候用then回调结果的时候也是数组类型
2、resolve({key:value}),里面可以传对象类型
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值