JS-ES6-Promise详解

ES6-Promise

  1. 什么是Promise

    是一种js异步编程的解决方案,主要解决回调地狱问题,最早由社区提出并实现,ES6将其写入了标准语言,并提供了Promise这个对象。

  2. Promise的三种状态
    1. 持续 pending
    2. 成功 resolved
    3. 失败 rejected

    =>对象的状态不受外界干扰,就像一种承诺,只有异步操作的结果来影响这三种状态。

  3. 用法
    1. Promise 是 ES6 内置的构造函数

      =>var p = new Promise( function( resolve, reject ){ }) Promise构造函数接受一个函数作为参数 这两个参数是javascript内置的两 个函数,直接可以使用

      • resolve函数 就是将异步操作成功执行时的结果作为参数传递出去
      • reject函数 就是将异步失败的结果作为参数传递出去
    2. 生成Promise实例的结果有一个方法分别是 then( ) 他可以接受两个参数 分别是指定的resolve和reject状态
      • p.then( function(value) { //success}, function( error) { //error })
      • 第一个参数是一个回调函数 表示异步操作执行成功之后 要进行的操作
      • 第二个参数也是一个回调函数 表示异步执行失败之后的 要进行的操作
      • 其中两个回调函数接受的参数都是Promise对象对应resolve和reject函数传出的值
      let p = new Promise(function(resolve, reject) {
                  // resolve('执行成功');
                  reject('我执行失败了');
              })
              p.then(function(value){
                  console.log(value);
              },function( value ){
                  console.log(value);//我执行失败了
              })
      
      
      • then方法要等待Promise构造函数执行之后才会执行
      let p = new Promise(function(resolve, reject) {
                  setTimeout(function() {
                      resolve('我执行成功了');
                  },1000)
              })
              p.then(function(value){
                  console.log('resolve');
                  console.log(value);
              },function( value ){
                  console.log(value);
              })
              console.log('-------');  
              //-------
              //resolve
              //我执行成功了
      
    3. 还可以使用catch方法代替 then方法中的第二个参数 这个结果跟上述方法结果一样没什么区别
      let p = new Promise(function(resolve, reject) {
                  // resolve('执行成功');
                  reject('我执行失败了');
              })
              p.then(function(value){
                  console.log(value);
              }).catch(function(error){
                  console.log(error);
              }) 
      
    4. all( [p1,p2,p3 ] )方法 用于将多个Promise实例包装成一个新的Promise实例 all方法会接受一个数组作为参数 数组中的值都是Promise实例
      • 执行机制

        1. p1, p2, p3 的状态都是resolve时,p的状态都会变成resolve 并将p1, p2, p3 的返回值作为一个数组返回给p的回调函数
        2. 只要有一个状态时reject时,该实例就会把当前是reject的那个值返回给p的回调函数
        const p1 = new Promise((resolve, reject) => {
              setTimeout(() => {
                resolve('结果 1')
              }, Math.random() * 5 * 1000)
            })
        
            const p2 = new Promise((resolve, reject) => {
              setTimeout(() => {
                resolve('结果 2')
                // reject('结果 2 失败')
              }, Math.random() * 5 * 1000)
            })
        
            const p3 = new Promise((resolve, reject) => {
              setTimeout(() => {
                resolve('结果 3')
              }, Math.random() * 5 * 1000)
            })
        
            // 使用 all() 把他们合成一个
            Promise
              .all([ p1, p2, p3 ])
              .then(res => {
                console.log(res)//["结果 1", "结果 2", "结果 3"]
              })
              .catch(err => {
                console.log(err)//返回异步执行失败的那一个
              })
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值