关于异步操作,我相信各位都已经耳熟能详了
今天就讲讲,大家最常用的promise以及async await两个函数,以及区别
promise
Promise 异步处理
Promise 用来表示一个异步操作的最终完成或者失败
Promise 的状态
pending 初始化的状态,正在进行,还没有完成或者失败 fulfilled 完成状态 rejectd 失败状态
Promise 的创建
var promise = new Promise((resolve,reject) =>{
if(true){
resolve() // 将promise的状态变成 已完成
}else{
reject() // 将promise的状态变成 已失败 }
})
resolve 和 reject 只能触发一个
特点
promise 创建之后立即执行
promise 状态改变之后不能再发生变化
方法
.then(() =>{ // 当 resolve 调用的时候要执行的代码 },()=>{ // 当 reject 调用的时候要执行的代码 })
.catch(err => { console.log(err) 当 reject 调用的时候 要执行的代码 })
.then(null,err =>{ console.log(err) 当 reject 调用的时候 要执行的代码 })
}
async
async
异步函数
创建异步函数
var p = new Promise((resolve,reject)=>{
resolve('成功')
})
async function a(){
var result = await p;
}
await 代表等待 p执行完成
执行结果
async的执行结果是个 promise 对象
二者区别
- promise是ES6,async/await是ES7
- async/await相对于promise来讲,写法更加优雅
- reject状态: promise错误可以通过catch来捕捉,建议尾部捕获错误, async/await既可以用.then又可以用try-catch捕捉