promise

在这里插入图片描述在这里插入图片描述
当我们遇到异步请求的时候会用到promise对这个异步操作进行封装。


    <script>
        //参数本身是一个函数,而函数又有两个参数,一个是resolve,一个是reject
        //   new promise(参数)
        //resolve与reject默认本身又是一个函数

        new Promise((resolve, reject) => {
            //第一次网络请求
            setTimeout(() => {
                //这要执行一次resolve()就会去执行then()函数
                resolve()
                    // console.log("111");
            }, 1000)

        }).then(() => {
            //第一次网络请求拿到的代码
            console.log("1111111");
            console.log("1111111");
            console.log("1111111");
            console.log("1111111");
            console.log("1111111");
            return new Promise((resolve, reject) => {
                //第二次网络请求
                setTimeout(() => {
                    resolve()
                }, 2000)

            })

        }).then(() => {
            //第二次网络请求拿到的代码
            console.log("222222");
            console.log("222222");
            console.log("222222");
            console.log("222222");
            console.log("222222");
            return new Promise((resolve, reject) => {
                //第三次网络请求
                setTimeout(() => {
                    resolve()
                }, 3000)
            })

        }).then(() => {
            //第三次网络请求拿到的代码
            console.log("333333");
            console.log("333333");
            console.log("333333");
            console.log("333333");
        })


        //另一种解释
        new Promise((resolve, reject) => {
            //成功调用resolve
            //resolve(data) 把data传入到then中
            resolve('hello');
            //失败调用reject
            reject('err');

        }).then(data => {
            console.log('成功了');
            console.log('成功了');
            console.log('成功了');
            console.log('成功了');
 //如果失败了,进行捕获错误,用catch,也就是请求失败时,要干什么
        }).catch(err => {
            console.log(err);
        })
    </script>

promise三种状态

在这里插入图片描述
另一种写法

 //另一种写法
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('hello')
                reject('err message')

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

案例

 //promise的链式调用
        //案例:网络请求:aaa->自己处理(10行)
        //处理:aaa111->自己处理(10行)
        //处理:aaa111222->自己处理
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('aaa')
            }, 1000);
        }).then((res) => {
            //自己处理10行代码
            console.log(res, "第一层的10行处理代码");
            //对我们的结果第一次处理
            return new Promise((resolve, reject) => {
                resolve(res + '111');
            })
        }).then((res) => {
            console.log(res, "第二层的10行处理代码");
            //对我们的结果第二次处理
            return new Promise((resolve, reject) => {
                resolve(res + "222")
            })


        }).then((res) => {
            console.log(res, '第三层的10行处理代码');
        })


        //上面这段代码的简写
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve("aaa")
            }, 1000);
        }).then((res) => {
            console.log(res, '第一层的10行处理代码');
            return Promise.resolve(res + "111");
        }).then(res => {
            console.log(res, '第二层的10行处理代码');
            return Promise.resolve(res + "222")
        }).then(res => {
            console.log(res, "第三层处理代码");
        })

        //上面的代码继续简写
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('aaa')
            }, 1000);
        }).then((res) => {
            console.log(res, '第一层的10行代码');
            return res + '111'
        }).then((res) => {
            console.log(res, "第二层的10行代码");
            return res + '222'
        }).then((res) => {

            console.log(res, "第三层的10行代码");
        })




        //上面这段代码如果遇到错误
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve("aaa")
            }, 1000);
        }).then((res) => {
            console.log(res, '第一层的10行处理代码');
            return Promise.reject("error message");
            //抛出异常,相当于生成了个错误,也会执行下面的catch
            throw "error message"
        }).then(res => {
            console.log(res, '第二层的10行处理代码');
            return Promise.resolve(res + "222")
        }).then(res => {
            console.log(res, "第三层处理代码");
        }).catch((err) => {
            console.log('如果遇到错误,前面的then就不会执行了');
        })



        //上面的代码如果遇到错误
        new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('aaa')
            }, 1000);
        }).then((res) => {
            console.log(res, '第一层的10行代码');
            return res + '111'
        }).then((res) => {
            console.log(res, "第二层的10行代码");
            return res + '222'
        }).then((res) => {

            console.log(res, "第三层的10行代码");
        })

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值