Promise

promise

1.prosmise是一个构造函数,他跟js中的Date,Array,等构造函数类似,都是使用new操作符实例化之后,通过传参和调用方式来完成某些特定功能,promise是专门用来实现多个异步函数,顺序必须是先后顺序执行的技术

1.promise可以理解为承诺,就像我们去店里定制一个东西,如果店家可以做,就会给我们做,这是成功,如果不能就拒绝,这是失败

注意:一个promise必须要有一个then来处理状态的改变

状态说明

1.promise包含三种状态pending,fulfilled,rejected三种状态

  • pending指初始等待状态,初始化promise时的状态

  • resolve 指已经解决,将promise状态设置为 fulfilled

  • rejecte 指拒绝处理,将promise状态设置为rejected

  • promise是生产者,通过reslovereject函数告知结果

  • promise非常适合需要一定执行时间的异步任务

  • promise状态一经确定,就不能改变

promise是队列状态,就像体育中的接力赛,状态一直向后传递,当然其中任何一个promise也可以改变状态

promise没有使用resolve或者reject改变状态时候,默认为pending

then相当于监听promise,是一个监听器。then返回的也是一个promise对象,

reject和reslove相当于promise的对象的两个方法,分别对应着promise的两个状态

Promise.all

promise.all将多个promise实例包装成一个新的promise实例,同时成功和失败的返回值不同,成功的时候返回的是一个数组,而失败的时候先返回的最先被reject失败状态的值,如果有多个失败的promise,只返回一个失败状态,就是数组最前面失败的那个promise

        let p1 = new Promise(function(resolve,reject){
            resolve('成功了')
        })
        let p2 = new Promise(function(resolve,reject){
            resolve('liquan')
        })
        let p3 = new Promise(function(resolve,reject){
            reject('err')
        })
        let p4 = new Promise(function(resolve,reject){
            reject('err1')
        })
        Promise.all([p1,p2]).then(function(res){
            console.log(res);
        })//Array(2)
        Promise.all([p1,p2,p3]).then(function(res){
            console.log(res);
        }).catch(function(err){
            console.log(err);
        })//err

promise.race

就是赛跑的意思,谁最先返回,就是谁的结果最先出来,就返回那个结果,不管是成功状态,还是失败状态

await如果是reject就会报错,要执行try catch就执行

      let p1 = new Promise(function(resolve,reject){
           setInterval(() => {
               resolve('成功了')
           }, 1000);
       })
       let p2 = new Promise(function(resolve,reject){
           setInterval(() => {
               reject('err')
           }, 500);
       })
       Promise.race([p1,p2]).then(function(res){
           console.log(res);
       }).catch(function(err){
           console.log(err);
       })  //err
       //不要定时器
      let p3 = new Promise(function(resolve,reject){
          resolve('成功了')
      })
      let p4 = new Promise(function(resolve,reject){
          reject('err')
      })
      Promise.race([p3,p4]).then(function(res){
          console.log(res);
      }).catch(function(err){
            console.log(err);
      })//成功了

async和await

        /*
        Async / await  是用来处理异步的,其实是Generator 函数的改进,背后的原理还是promise
        */
       console.log(1);
       /*
       Async:封装的函数返回的是一个promise对象
       */
       async function f1(){
           return 'abc';  //返回值直接包装成为一个promise对象
           //return promise.resolve('abc');
           //等价于 return new Promise(function(resolve,reject){resolve('abc')});
           
       }
       console.log(f1());
       console.log(3);

       /*
       await 阻塞后面的代码,等当前的代码执行完在执行下面的代码 await 命令后面是一个 Promise 对 
     象,它也可以跟其他值,如字符串,布尔值,数值以及普通函数。
       */

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值