解析Promise解决异步回调
Promise是ES6语法中新增的一个标准内置对象,它代表了一个异步操作的最终完成或者失败,能够把异步操作最终的成功返回值或者失败原因和相应的处理函数关联起来,是异步“回调地狱”的解决方案之一。
当我们执行一个异步的行为的时候,我们需要在一个异步行为执行完毕之后做一些事情,那么,我们是没有办法提前预知这个异步行为是什么时候完成的,我们就只能以回调函数的形式来进行,比如我们需要通过ajax请求一个数据,根据ajax返回的结果执行不同的代码,但是我们不知道ajax对象什么时候能获取到返回结果,就需要使用回调函数,看下面的代码:
如果采用上面的调用方式,先调用getData获取数据以后直接调用showData显示数据,那么document.body.innerHTML = null,因为此时data还没有获取到数据,请求时异步的,我们需要在请求完成的时候调用showData才行,也就是像下面这样调用
当一个回调函数嵌套一个回调函数的时候,就会出现一个嵌套结构,当嵌套的多了就会出现回调地狱的情况, 比如我们发送三个 ajax 请求,第一个正常发送,第二个请求需要第一个请求的结果中的某一个值作为参数,第三个请求需要第二个请求的结果中的某一个值作为参数
Promise是一个对象,这个对象有三个状态:
待定(pending):初始状态,既没有成功,也没有失败,表示异步任务正在进行中
成功(fulfilled):异步任务执行完毕,变成成功状态
失败(rejected):异步任务执行完毕,变成失败状态
下面就带大家创建一个Promise对象