promise

1、什么是promise?

在这里插入图片描述

2、网络请求的回调地狱

在这里插入图片描述

3、Promise的基本使用1

<!DOCTYPE html>
<html lang="zh-CN">

<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>
</head>

<body>
<script>
  //什么情况下会用到Promise?
  // 一般情况下是有异步操作时,使用Promise对这个异步操作进行封装
  // new ->构造函数(1、保存了一些状态信息 2、执行传入的函数)
  // 在执行传入的回调函数时,会传入两个参数,resolve,reject,本身又是喊出
  new Promise((resolve,reject) => {
    setTimeout(() => {
      // 成功的时候调用resolve
      resolve('Hello World')
      // 失败的时候调用reject
      // reject('err message')
    }, 1000)
  }).then((data)=>{
    console.log(data);
    console.log(data);
    console.log(data);
    console.log(data);
    console.log(data);
  }).catch((err)=>{
    console.log(err);
    console.log(err);
    console.log(err);
    console.log(err);
    console.log(err);
  })
</script>
</body>

</html>

4、Promise的三种状态

在这里插入图片描述
在这里插入图片描述

5、Promise的基本使用2

<!DOCTYPE html>
<html lang="zh-CN">

<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>
</head>

<body>
<div id="app">

</div>

<script>
  new Promise((resolve,reject)=>{
    // resolve('Hello world');
    reject('hello vue');
  }).then(data =>{
    console.log(data);
  },err=>{
    console.log(err);
  })
</script>
</body>

</html>

6、Promise的链式调用

在这里插入图片描述

6.1、Promise的链式调用一

<!DOCTYPE html>
<html lang="zh-CN">

<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>
</head>

<body>
  <div id="app">
  </div>

  <script>
    // 参数 -> 函数(resolve,reject)
    // resolve,reject本身又是函数
    // 链式编程
    new Promise((resolve,reject)=>{
      // 第一次网络请求
      setTimeout(() => {
        resolve()
      }, 1000)

    }).then(()=>{
      // 第一次拿到结果处理的代码
      console.log('Hello world');
      console.log('Hello world');
      console.log('Hello world');
      console.log('Hello world');
      console.log('Hello world');

      return new Promise((resolve,reject)=>{
        // 第二次网络请求的代码
        setTimeout(() => {
          resolve()
        }, 1000);
      })
      }).then(()=>{
        // 第二次拿到结果处理的代码
        console.log('Hello vue');
        console.log('Hello vue');
        console.log('Hello vue');
        console.log('Hello vue');
        console.log('Hello vue');

        return new Promise((resolve,reject)=>{

          // 第三次网络请求的代码
          setTimeout(()=>{
            resolve()
          },1000)
        })
      }).then(()=>{
        // 第三次拿到结果处理的代码
        console.log('Hello python');
        console.log('Hello python');
        console.log('Hello python');
        console.log('Hello python');
        console.log('Hello python');
    })
  </script>
</body>

</html>

在这里插入图片描述

6.2、Promise的链式调用二(简写方式)

在这里插入图片描述

<!DOCTYPE html>
<html lang="zh-CN">

<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>
</head>

<body>
  <div id="app">
  </div>

  <script>
    // 网路请求:aaa -> 自己处理(10行)
    // 处理:aaa111 -> 自己处理(10行)
    // 处理:aaa111222 -> 自己处理

    //1、写法一:Promise((resolve,reject)=>{})
    // new Promise((resolve,reject)=>{
    //   setTimeout(()=>{
    //     resolve('aaa');
    //   },1000)
    // }).then(res=>{
    //   // 1、自己处理10行代码
    //   console.log(res,'第一层的10行处理代码');

    //   // 2、对结果进行第一次处理
    //   return new Promise((resolve,reject)=>{
    //    resolve(res + '111')
    //   })
    // }).then(res=>{
    //   console.log(res,'第二层的10行代码处理');

    //   return new Promise(resolve=>{
    //     resolve(res + '222')
    //   })
    // }).then(res=>{
    //   console.log(res,'第三层的10行处理代码')
    // })

     // 2、new Promise(resolve => resolve(结果))简写
      // new Promise((resolve,reject)=>{
      //   setTimeout(()=>{
      //     resolve('aaa');
      //   },1000)
      // }).then(res=>{
      //   // 1、自己处理10行代码
      //   console.log(res,'第一层的10行处理代码');

      //   // 2、对结果进行第一次处理
      //   return Promise.resolve(res + '111')
      
      // }).then(res=>{
      //   console.log(res,'第二层的10行代码处理');

      //   return Promise.resolve(res+222)
      // }).then(res=>{
      //   console.log(res,'第三层的10行处理代码')
      // })


      // 3、省略掉Promise.resolve
		new Promise((resolve, reject) => {
		   setTimeout(() => {
		     resolve('aaa')
		   }, 1000)
		 }).then(res => {
		   // 1.自己处理10行代码
		   console.log(res, '第一层的10行处理代码');
		
		   // 2.对结果进行第一次处理
		   return res + '111'
		 }).then(res => {
		   console.log(res, '第二层的10行处理代码');
		
		   return res + '222'
		 }).then(res => {
		   console.log(res, '第三层的10行处理代码');
		 })
  </script>
</body>

</html>

在这里插入图片描述

6.3、Promise的链式调用处理异常的两种写法

<!DOCTYPE html>
<html lang="zh-CN">

<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>
</head>

<body>
  <div id="app">
  </div>

  <script>
      // 4、网络异常时的处理
      new Promise((resolve,reject)=>{
        setTimeout(()=>{
          resolve('aaa');
        },1000)
      }).then(res=>{
        // 1、自己处理10行代码
        console.log(res,'第一层的10行处理代码');

        // 2、对异常结果进行处理(方式一)
        return Promise.reject('err message')
        // 对异常结果进行处理(方式二)
        throw 'err message'
      
      }).then(res=>{
        console.log(res,'第二层的10行代码处理');

        return Promise.resolve(res + '222')
      }).then(res=>{
        console.log(res,'第三层的10行处理代码')
      }).catch(err=>{
        console.log(err);
      })
  </script>
</body>

</html>

在这里插入图片描述
在这里插入图片描述

7、Promise的all方法的使用

<!DOCTYPE html>
<html lang="zh-CN">

<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>
</head>

<body>
  <div id="app">
  </div>

  <script>
   Promise.all([
    new Promise((resolve,reject)=>{
       setTimeout(() => {
         resolve({name:'why',age:18})
       }, 1000);
    }),
    new Promise((resolve,reject)=>{
      setTimeout(() => {
        resolve({name:'kobe',age:42})
      }, 1000);
    })
   ]).then(results=>{
     console.log(results);
   })
  </script>
</body>

</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值