Promise语法学习笔记

Promise是ES6新增内置类

Promise是一个“承诺”设计模式,用来解决JS异步编程中“回调地狱”
Promise是管控异步编程的,执行他的时候会立即把executor函数执行
new Promise的时候首先把([exectutor])函数执行,会给([exectutor])函数传递两个实参 ,resolve函数和reject函数

  • [实例]:
    • [PromiseStatus]
    • [PromiseValue]
说明PromiseStatus状态PromiseValue值
new promise的时候peddingundefined
RESOLVE函数执行的时候fulfilled / resolveundefined
REJECT函数执行的时候reject传递的第一个实参
  • [Promise.prototype]
    • then : 如果状态一旦确定,想去执行.then注入的方法,但是此方法没有被注册,则找下一个.then方法
      • .then注入回调方法时,可写可不写
      • .then([fnOK],[FnNO])
      • .then([fnOK])
      • .then(null,[fnNO])
      • .then()
      Promise.reject(100).then(value => {
	  } /*value2 => {           =====>此处reject函数没注入会找下一个.then方法
	    console.log(value2);    
	    return Promise.resolve(200)
	  } */)
	  .then(null,/* value => {  =====>此处resolve函数没注入会找下一个.then方法
	    console.log(value);
	  } */value2 => {
	    console.log(value2);    =====>所以返回100
	  })    
  • catch
    有了上面then的铺垫可得以下结论(catch原理说白了就是.then的第一个函数不写)
    • p1.catch(reason=>{}) <===> p1.then(null,reason=>{})
      所以项目中常用.then表示成功,.catch表失败
   Promise.reject(100).then(value => {
      console.log('OK',value);
	}).catch(reason => {
	   console.log('NO',reason);   
	})             =====>NO 100
  • finally : 同“异常捕获”,不管成功或者失败都会走
  • [普通对象]
    • reject() 成功实例
    • resolve() 失败实例
    • all 数组中存放着多个PROMISE实例,所有实例都是成功的,整体实例返回才成功,只要有一个失败的,就都是失败(整体都对才是对,只要有一个错就都错)
 function fn1() {  
    return Promise.resolve(1);
}
function fn2() {  
    return new Promise((resolve,reject) => {
       setTimeout(()=>{
           resolve(2)
       })
    });
}
function fn3() {  
    return new Promise((resolve,reject) => {
       setTimeout(()=>{
           resolve(3)
       })
    });
}

Promise.all([fn1(),fn2(),fn3()]).then(values => {
    // values[Array]:按照数组顺序存储每一个实例返回的结果
    console.log(values);    // =====> [1, 2, 3]
}).catch(reason => {
    // 一旦失败,整体都是失败,存储的是每一个实例返回的结果
    console.log(reason);
})
  • race 看哪个PROMISE实例谁先处理完,就以谁的结果作为p3的结果(不论成功或失败,谁快听谁的)
Promise.race([fn1(),fn2(),fn3()]).then(value => {
    console.log(value);    // =====>1    谁先到就以谁为主
}).catch(reason => {
    console.log(reason);
})

async / await 是ES7提出来的,是对Promise的一个补充

  • 用async修饰的函数,都会返回一个promise实例
    • 状态:大都是成功的,如果代码执行报错,返回失败 ,如果手动返回一个新的Promise实例,则按照新的实例状态处理
  • 用await可以把一个异步任务变为类似同步的效果(本质不是同步,还是异步,而且是异步中的微任务)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值