Promise

基础理解

  • 定义
    定义promise函数会返回表示异步操作的promise对象,类似于承诺未来某个时刻完成。

    let promise = readFile("text.txt");
    promise.then((content)=> {
        console.log(content);
    }), function(err) {
        console.log(err);
    }
    

  • 三种状态

    • pending(进行中)
      如上定义时对象就是该状态

    • Fulfilled、Rejected
      当对象完成异步操作时结果的两种状态成功和失败

    当我们操作挂起函数时,通过then方法去实现如上代码2~6


  • 执行器操作

    • 如果错误那么会向reject函数传递错误对象

    • 当操作成功时执行器向resolve传递文件内容,读取文件然后在去执行then中的操作。

    • 执行器是立即执行的,而then,catch方法会被丢入任务队列


  • 创建已处理

    • resolve
      是直接创建的所以该方法永远不会有拒绝状态
      直接采用resolve方法接受一个参数直接返回一个完整的promise对象
      let promise = Promise.resolve(12);
      promise.then(function(content){
          console.log(content); // 12
      })
      
    • reject
      与上面相反是创建一个仅拒绝状态下所用的
      let promise = Promise.reject(12);
      promise.catch(function(vaule) {
          console.log(vaule);
      })
      

  • Promise串联

    • then、catch方法运行时创建并返回了一个promise对象所以事件可以直接串联起来
      let promise = Promise.resolve(42);
      promise.then((vaule) => {
          console.log(vaule);
      }).then(() => {
          console.log('串联实现');
      });
      
    • Promise链
      可以给串联起来的下游Promise对象传递数值供操作

  • 响应多个Promise

    • Promise.all()
      该方法相当于接受一个Promise数组转换成一个Promise对象,只有内部都处于完成状态合并的Promise对象才能完成
      let p1 = new Promise(function(resolve, reject) {
          resolve(1);
      });
      let p2 = new Promise(function(resolve, reject) {
          resolve(2);
      });
      let p3 = new Promise(function(resolve, reject) {
          resolve(3);
      });
      let p4 = Promise.all([p1, p2, p3]);
      p4.then(function(vaule) {
          console.log(vaule);
      })
      
    • .race()
      合并对象遵循最先的实现的
  • 实际案例理解
    获取用户登录信息和详细信息

      let status = 1;
      let userLogin = (resolve, reject)=> {
          setTimeout(()=> {
              if(status == 1) {
                  resolve({name:'司尘', emailAddress:'111@163.com'});
                  }else {
                      reject('登录失败');
                  }
          }, 2000);
      };
      let getUserInfo = (resolve, reject)=> {
          setTimeout(()=> {
              if(status == 1) {
                  resolve({birthplace:'Hubei', profession:'student'});
              }else {
                  reject('获取用户信息失败');
              }
          }, 2000);
      };
      let promise = new Promise(userLogin);
      promise.then((resolve, reject)=> {
          console.log(resolve);
          return new Promise(getUserInfo);
      }).then((resolve, reject)=> {
          console.log(resolve);
      });
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值