promise笔记

promise的基本使用

// 什么情况下会用到Promise?
// 一般情况下是有异步操作时,使用Promise对这个异步操作进行封装
// new -> 构造函数(1.保存了一些状态信息 2.执行传入的函数)
// 在执行传入的回调函数时, 会传入两个参数, resolve, reject.本身又是函数


new Promise((resolve, reject) => {
     
    setTimeout(() => {
     
      // 成功的时候调用resolve
      // resolve('Hello World')

      // 失败的时候调用reject
      reject('error message')
    }, 1000)
  }).then((data) => {
       //成功就写在这
    // 1.100行的处理代码
    console.log(data);
    console.log(data);
    console.log(data);
    console.log(data);
    console.log(data);
  }).catch((err) => {
       //失败写在这
    console.log(err);
  })
    new Promise((resolve,reject) => {
     
   setTimeout(() => {
     
        // resolve(123)
        reject(222)
   },1000)
 }).then((data) => {
     
   console.log(data);
 }).catch((qqq) => {
     
  console.log(qqq);
 }
 )

Promise的三种状态

promise笔记_第1张图片
promise笔记_第2张图片

promise的另外处理模式

<script>
  new Promise((resolve, reject) => {
     
    setTimeout(() => {
     
      // resolve('Hello Vuejs')
      reject('error message')
    }, 1000)
  }).then(data => {
     
    console.log(data);
  }, err => {
     
    console.log(err);
  })
</script>

promise的链式调用 (1)


<script>


  // 参数 -> 函数(resolve, reject)
  // resolve, reject本身它们又是函数
  // 链式编程
  new Promise((resolve, reject) => {
     

    // 第一次网络请求的代码
    setTimeout(() => {
     
      resolve()
    }, 1000)

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

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

      // 第二次网络请求的代码
      setTimeout(() => {
     
        resolve()
      }, 1000)
    })
  }).then(() => {
     

    // 第二次处理的代码
    console.log('Hello Vuejs');
    console.log('Hello Vuejs');

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

      // 第三次网络请求的代码
      setTimeout(() => {
     
        resolve()
      })
    })
  }).then(() => {
     

    // 第三处理的代码
    console.log('Hello Python');
    console.log('Hello Python');
  })
</script>
//最原始写法
 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行处理代码');
  }).catch(err => {
     
    console.log(err);
  })

  // 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行处理代码');
  })

更简写

// 省略掉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行处理代码');
  })

处理错误!


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

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

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

promise的all方法使用


  Promise.all([
      // new Promise((resolve, reject) => {
     
      //   $.ajax({
     
      //     url: 'url1',
      //     success: function (data) {
     
      //       resolve(data)
      //     }
      //   })
      // }),
      // new Promise((resolve, reject) => {
     
      //   $.ajax({
     
      //     url: 'url2',
      //     success: function (data) {
     
      //       resolve(data)
      //     }
      //   })
      // })

    new Promise((resolve, reject) => {
     
      setTimeout(() => {
     
        resolve({
     name: 'why', age: 18})
      }, 2000)
    }),
    new Promise((resolve, reject) => {
     
      setTimeout(() => {
     
        resolve({
     name: 'kobe', age: 19})
      }, 1000)
    })
  ]).then(results => {
     
    console.log(results);
  })

你可能感兴趣的:(promise笔记)