什么是 Promise
Promise是异步编程的一种解决方案Promise是一个对象,从它可以获取异步操作的消息Promise提供统一的 API,各种异步操作都可以用同样的方法进行处理Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值
Promise 的状态介绍
状态:
-
pending(进行中):初始状态,既没有被兑现,也没有被拒绝。 -
fulfilled(已成功):意味着操作成功完成。 -
rejected(已失败):意味着操作失败。
特点:
- 对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态
- 一旦状态改变(从
pending变为fulfilled和从pending变为rejected),就不会再变,任何时候都可以得到这个结果
流程:
Promise 的用法介绍
实例方法:
- then() 返回一个
新的 promise 对象
then是实例状态发生改变时对的回调函数,then方法可以接收两个回调函数作为参数,第一个回调函数是promise对象的状态变为resolved调用,第二个回调函数是promise对象的状态变为rejected时调用,其中第二个参数可以省略。
getJSON("/data.json").then((res)=> {
console.log(res);
}).then((data)=> {
// ...
});
- catch() 返回一个
失败的 promise 对象
catch是实例状态发生错误时的回调函数。一般来说,使用catch方法代替then()第二个参数
getJSON("/data.json").then((res)=> {
console.log(res);
}).catch((err)=> {
console.log(err);
});
- finally() 返回一个
成功 / 失败的 promise 对象
finally是实例状态如何,都会执行的操作。
getJSON("/data.json").then((res)=> {})
.catch((err)=> {})
.finally(()=>{})
- all() 只有所有的 promise 都成功才成功, 只要有一个失败了就直接失败
const p = Promise.all([p1, p2, p3]);
- race() 第一个完成的 promise 就是最终的结果状态;返回一个新的 promise
const p = Promise.race([p1, p2, p3]);
- any() 接收一个 promise 对象的集合,当其中的任意一个 promise 成功,就返回那个成功的 promise 的值
const p = Promise.any([p1, p2, p3]);
为什么要用Promise
- 指定回调函数的方法更加灵活
- 支持链式调用 ,可以解决回调函数问题
- new 出来的 Promise 实例对象,代表一个 异步操作