欢迎光临散文网 会员登陆 & 注册

解析Promise解决异步回调

2023-02-24 09:40 作者:千锋前端  | 我要投稿

Promise是ES6语法中新增的一个标准内置对象,它代表了一个异步操作的最终完成或者失败,能够把异步操作最终的成功返回值或者失败原因和相应的处理函数关联起来,是异步“回调地狱”的解决方案之一。


1 应用场景

要了解Promise对象,首先要了解这个对象的应用场景,Promise对象主要就是为了解决异步回调地狱问题的,那么什么是回调函数呢?请看下面的一段代码:

此时,函数a和函数a的参数都是一个函数,为了便于区别,我们把作为函数a参数传入的那个函数b叫做函数a的回调函数,我们为什么需要回调函数?

 当我们执行一个异步的行为的时候,我们需要在一个异步行为执行完毕之后做一些事情,那么,我们是没有办法提前预知这个异步行为是什么时候完成的,我们就只能以回调函数的形式来进行,比如我们需要通过ajax请求一个数据,根据ajax返回的结果执行不同的代码,但是我们不知道ajax对象什么时候能获取到返回结果,就需要使用回调函数,看下面的代码:

如果采用上面的调用方式,先调用getData获取数据以后直接调用showData显示数据,那么document.body.innerHTML = null,因为此时data还没有获取到数据,请求时异步的,我们需要在请求完成的时候调用showData才行,也就是像下面这样调用

2 回调地狱

 当一个回调函数嵌套一个回调函数的时候,就会出现一个嵌套结构,当嵌套的多了就会出现回调地狱的情况, 比如我们发送三个 ajax 请求,第一个正常发送,第二个请求需要第一个请求的结果中的某一个值作为参数,第三个请求需要第二个请求的结果中的某一个值作为参数


  • 回调地狱,其实就是回调函数嵌套过多导致的,当代码成为这个结构以后,已经没有维护的可能了,所以我们要把代码写的更加的艺术一些。

3 Promise的使用

Promise是一个对象,这个对象有三个状态:

  • 待定(pending):初始状态,既没有成功,也没有失败,表示异步任务正在进行中

  • 成功(fulfilled):异步任务执行完毕,变成成功状态

  • 失败(rejected):异步任务执行完毕,变成失败状态

下面就带大家创建一个Promise对象


解析Promise解决异步回调的评论 (共 条)

分享到微博请遵守国家法律