千锋教育JavaScript全套视频教程(10天学会Js,前端javascrip

回调地狱
回调函数:就是把一个函数当作一个函数的参数-
当异步操作想要有顺序执行时,只能再一个异步成功以后的回调函数里面嵌套另一个异步的操作,如果嵌套层数过多就形成了回调地狱,弊端:后期代码维护比较难
promese
解决回调地狱的问题
promise 封装了异步操作,创建一个promise对象,创建一个函数参数,这个函数参数有两个参数(resolve,rehject),函数参数内部写异步操作,成功resolve(),失败reject(),然后promise对象会接收到异步操作的状态。p.then(成功)、p.catch(失败)
promise 对象的状态(状态机-记录内部异步操作的状态)
进行中 pending (promise创建以后)
成功 fulfilled(调用resolve 以后就会成功 ----resolve(成功的结果))
失败 reject (调用reject以后就会失败---reject(失败结果))
进行中--成功
进行中--失败,
状态不可逆
promise 封装
1.写个函数
2.函数内部创建promise对象
3.promise 对象里写异步操作,成功调resolve 失败调reject
4.这个函数 return promise对象
缺点:还有一层嵌套
promise的静态方法
1.快速创建一个成功的peomise对象
peomise.resolve()
2.失败:promise.reject
3.promise.all(数组)
all的参数是一个数组,数组中元素是多个promise对象,all方法返回一个promise对象两个都成功才成功,有一个失败那么就是失败
4.promise.race(数组)看谁更快就取谁的状态
5.promise.any() 获取第一个成功的promise的状态
6.promise.allSettled(数组)全部结清,会等到都结束,统一获取所有人的状态。
async await
原理:实际上是生成器函数的语法糖
es 7的语法
回调地狱最终解决方法
可以将异步嵌套的语法,改成像是同步一样。不需要嵌套,就可以有先后顺寻
使用:
1.定义一个函数,函数前面加async
2.函数里面可以写异步操作,异步操作必须被promise封装
3.promise对象前面写一个 await,就会等promise'里的异步操作成功以后再往下执行
缺点:只能等成功之后往下执行
try -catch