欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ES6新增内置类Promise语法介绍

程序员文章站 2022-06-28 17:20:04
Promise是ES6新增内置类Promise是一个“承诺”设计模式,用来解决JS异步编程中“回调地狱”Promise是管控异步编程的,执行他的时候会立即把executor函数执行new Promise的时候首先把([exectutor])函数执行,会给([exectutor])函数传递两个实参 ,resolve函数和reject函数[实例]:[PromiseStatus][PromiseValue]说明PromiseStatus状态PromiseValue值...

Promise是ES6新增内置类

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

  • [实例]:
    • [PromiseStatus]
    • [PromiseValue]
说明 PromiseStatus状态 PromiseValue值
new promise的时候 pedding undefined
RESOLVE函数执行的时候 fulfilled / resolve undefined
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可以把一个异步任务变为类似同步的效果(本质不是同步,还是异步,而且是异步中的微任务)

ES6新增内置类Promise语法介绍
ES6新增内置类Promise语法介绍

本文地址:https://blog.csdn.net/qq_39288578/article/details/108246390

相关标签: ES6 Promise