ES6新增内置类Promise语法介绍
程序员文章站
2022-03-26 16:33:42
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()
-
then : 如果状态一旦确定,想去执行.then注入的方法,但是此方法没有被注册,则找下一个.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可以把一个异步任务变为类似同步的效果(本质不是同步,还是异步,而且是异步中的微任务)
本文地址:https://blog.csdn.net/qq_39288578/article/details/108246390