Promise
是异步编程的一种解决方案
是为了解决js中的回调地狱问题
- 什么是回调地狱
当回调函数嵌套过多时就会出现回调地狱
ajax(url1,function(res1){
console.log(res1)
ajax(url2,function(res2){
console.log(res1,res2);
ajax(url3,function(res3){
console.log(res1,res2,res3);
})
})
})
Promise对象代表一个异步操作,它有三种状态:pending(进行中),resoved(已成功),rejected(已失败)
Promise的好处在于可以将异步操作以同步操作的流程(方式)表达出来(通俗的说:即使你调用的是异步代码,它也会变成类似同步,等异步代码执行完之后再执行同步);它也有一些缺点:它一旦新建就会立即执行,中途不可取消,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
用法
Promise对象是一个构造函数,用来生成Promise实例。Promist构造函数接受一个回调函数作为参数,该函数又有两个参数resolve和reject。resolve是在异步操作成功时调用,用then来接收,并将返回结果通过参数形式,用catch来接收
async和await
用法:
async的用法,他作为一个关键字放到函数前面,这样普通的函数就变为了异步函数
- 异步async函数调用,跟普通函数的使用方式一样
- 异步async函数返回一个promise对象
- async函数配合await关键字使用(阻塞代码往下执行)是异步方法,但是阻塞式的
const post = async function () {
let { data } = await axios.get(url)
}