Promise的详细用法解析

261 阅读2分钟
Promise太重要了
Promise是ES6新增的内置类(new Promise)
把Promise当做构造函数,创建出来的一个实例: new Promise(()=>{}),查看实例的属性和原型上的方法
实例是没有自己私有属性的,但是new Promise(()=>{})里面有两个比较特殊的私有属性:[[PromiseStatus]]、[[PromiseValue]]
[[PromiseStatus]]是promise状态:pending、fulfilled/resolved、rejected
[[PromiseValue]]是promise的值
通过new Promise(()=>{})查看Promise实例原型上的方法:Promise.prototype上有三个方法:then 、 catch 、 finally
Promise作为普通对象,查看它的方法: dir(Promise),他的方法:
reject 、 resolve 、 all 、 race
Promise是一个“承诺”设计模式,主要目的是用来解决js异步编程中的“回调地狱”(有效的管控异步编程)
new Promise() // 报错:Promise resolver undefined is not a function
new Promise([executor]) // executor是一个可执行的函数
Promise是用来管控异步编程的,new Promsie本身不是异步的,执行它的时候会立即把executor函数执行(只不过我们经常在executor中管控一个异步操作)
resolve/reject : 传递给executor函数的参数(参数值都是函数)
promise初始状态是pending 初始值是undefined
resolve([value])函数执行,修改promise状态为fulfilled/resolved成功状态,并且改变其值为[value]
reject([reason])函数执行,修改promise状态为rejected失败状态,并且改变其值为[reason]
如果executor函数执行报错,状态也会变为失败态,并且改变其值是失败的原因
一但状态发生改变,都不能改变为其他状态了
let p = new Promise((resolve, reject) => {
resolve("ok");
// reject("no");
});
console.log(p);
p.then(
value => {console.log("成功", value);},
reason => {console.log("失败", reason);}
);
★Promise中的异步指的是resolve/reject执行。执行两个方法的时候不仅仅是修改状态和值,还要通知then存储的两个回调函数中的一个执行。执行两个方法的时候,需要先等待promise已经基于then把方法存储完毕,有方法后才会去执行
基于then存放两个回调函数,状态为成功后调用第一个回调函数执行,形参的值就是[[PromiseValue]],状态为失败则调用第二个回调函数执行,形参的值就是[[PromiseValue]]