promise

  <script>
    new Promise((resolve, reject) => {
      setTimeout(() => {
        // resolve("hello zjh");   调用then
         reject("error message")   //调用reject
      }, 2000)
    }).then((data) => {
      console.log(data);      
    }).catch(error => {
      console.log(error);
    })
  </script>
  • 当我们开发中有异步操作时,就可以给异步操作包装一个Promise
  • 异步操作之后会有三种状态
    pending: 等待状态 ,比如正在进行网络请求,或者定时器没有到时间
    fulfill:满足状态,当我们主动回调了resolve 时,就处于该状态,并且会回调then()
    reject: 拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调catch()
new Promise((resolve,reject)=>{
   setTimeout(()=>{
       reject("failed");
       resolve("success");       
     },1000)
  }).then(data=>{
      console.log(data);
  },err=>{
      console.log(err);         
  })
  //另一种写法:在then()中两个函数分别对应resolve()和reject()
new Promise((resolve,reject)=>{
      resolve("aaa")
    }).then(res=>{
      return new Promise((resolve,reject)=>{
        resolve(res+'111')
      });
    }).then(res=>{
      return new Promise((resolve,reject)=>{
        resolve(res+'222')
      })
    }).then(res=>{
      console.log(res+'333');
    })

    // 第一种简写:
    new Promise((resolve, reject) => {
      resolve("aaa")
    }).then(res => {
      return Promise.resolve(res + '111')
    }).then(res => {
      return Promise.resolve(res + '222')
    }).then(res => {
      return console.log(res + '333');
    })
    //输出aaa111222333

// 第二种简写:省略掉Promise.resolve
    new Promise((resolve, reject) => {
      setTimeout(()=>{
        resolve("aaa")
      },2000)
    }).then(res => {
      return res + '111'
    }).then(res => {
      return res + '222'
    }).then(res => {
      return console.log(res + '333');
    })

new Promise((resolve, reject) => {
  setTimeout(()=>{
      resolve("aaa")
    },2000)
  }).then(res => {
    console.log(res);
    return Promise.reject('第二层error')
	// throw '第二层error' ;    这样写也行
  }).then(res => {
    return Promise.resolve(res + '222')
  }).then(res => {
    return console.log(res + '333');
  }).catch(err=>{
    console.log(err);
  })
  //输出aaa  第二层error
  </script>
  • Promise.all 针对两次请求的需求0
Promise.all([
  new Promise((resolve,reject)=>{
    setTimeout(()=>{
      resolve('result1')
    })
  }),
  new Promise((resolve,reject) =>{
    setTimeout(()=>{
      resolve('result2')
    })
  })
]).then(results =>{   //当两个Promise都调用resolve时,就调用then, results参数是数组,接收resolve的结果
  console.log(results); //输出["result1", "result2"]
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值