Promise本身是一个构造函数,是为了解决异步处理回调地狱而产生的,可以进行链式调用。
Promise的三种状态:
1、pending(等待状态):初始状态,既不是成功,也不是失败状态。
2、fulfilled/resolved(已解决):操作成功完成的状态。
3、rejected(已拒绝):操作失败的状态。
Promise语法:
romise是一个构造函数,使用new关键字创建一个Promise对象,构造函数的参数是一个回调函数,该回调函数有两个参数,分别为resolve(把状态由等待转为已解决),reject(把状态由等待转为已拒绝)。
Promise事例方法:
.then()方法:用于指定当Promise成功时执行的回调函数。
.catch()方法:用于指定当Promise失败时执行的回调函数。
.finally()方法:最后无论成功还是失败最后一定会执行的
Promise静态方法:
1、Promise.resolve()方法:将状态改为成功,
2、Promise.reject()方法:将状态改为失败,
3、all()方法:解决并发的异步操作,实现异步请求并发的方法,所有并发的请求全部成功才算成功,会使用then方法把所有请求传过来的参数包裹在一个数组中,只要有一个失败就算失败。
4、rece() 赛跑,该方法是只要有一个异步请求有了结果(不论成功失败,就把该结果作为promise的返回值。
Promise的操作:
下面我们来实现一个简单的异步操作,模拟如何使用Promise来处理异步操作的成功和失败情况。
new Promise((resolve,reject) => {
setTimeout(() => {//写一个异步方法模拟成功或失败
if(Math.random() > 0.5){
resolve("异步请求成功")
}else{
reject('异步请求失败')
}
},2000)
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
async和await:
ES2017 标准引入了 async 函数,使得异步操作变得更加方便
返回 Promise 对象
async 函数是一个返回 Promise 对象的函数。
async 函数内部 return 语句返回的值,会成为 then 方法回调函数的参数。
await 命令:
await 命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。
使用注意点:
- await 命令后面的 Promise 对象,运行结果可能是 rejected ,所以最好把 await 命令放在 try...catch 代码块中。
- 多个 await 命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。
- await 命令只能用在 async 函数之中,如果用在普通函数,就会报错。
- async 函数可以保留运行堆栈。