在漫漫历史长河中,许多文人墨客对于承诺这个概念有着很多的见解,也留下了很多脍炙人口的篇章,如"君子一言驷马难追",《诗经·邶风·击鼓》中有着一段"死生契阔,与子成说。执子之手,与子偕老。"直至今日依然为世人传颂.
ES6时代,javascript提出了一个新的构造器"promise(承诺)",这掷地有声的名称背后也是前端开发中非常重要的一个语法.
一.什么是promise
promise是ES6提出的一种新语法,一个新的构造器,用于优化实现异步操作。
二.如何使用
1.语法格式
//实例化创建promist对象
let promise = new Promise((resolve, reject) => {
//形参resolve与reject可以改变当前的状态
resolve("我成功了");
// reject('我失败了')
});
//观察promise对象
console.log(promise);
//兑现承诺
promise
.then((res) => {
//当状态PromiseState从pending变化为resolved时触发.即成功
//形参res是resolve承诺的值
console.log(res);
})
.catch((err) => {
//当状态PromiseState从pending变化为rejected时触发.即失败
//形参err是reject承诺的值
console.log(err);
})
.finally(() => {
//不管成功与否,这个函数都会执行
console.log("我都会执行");
});
2.三种状态和值
2.1初始态
pending(待定的,将要发生的),在刚刚创建promise对象时,没有调用resolve或者reject方法,此时的状态(PromiseState)就是pending.
2.2成功态
fulfilled(实现),创建promise对象后,调用了第一个形参'resolve',此时状态就是fulfilled
2.3失败态
rejected(拒绝),在创建promise对象后,调用了第二个形参'reject',此时状态就是rejected
2.4注意点
pending状态可转化,一旦由初始态转化为其他任意一态,转换过程便不可逆了,也就是说转化之后再也不能转化为pending,也不能转化为另一态.
2.5值
调用形参(reso