我相信,Promise对于我们前端工程师已经很熟悉了,在平常的工作中,也经常会使用它来进行异步流程的控制
它相较于回调函数,最大的优点就是可以 链式调用,从而可以让我们远离回调地狱,使我们的异步流程代码更加清晰可读,本篇文章就准备好好聊聊关于它的链式调用的相关知识,废话不多说,开搞!
什么是Promise
在开始讲解链式调用前,我们还是先回顾下什么是promise?
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise
对象。
所谓Promise
,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理
它有两个特点:
- 对象的状态不受外界影响
- 一旦状态改变,就不会再变,任何时候都可以得到这个结果
链式调用
Promise的链式调用,让它彻底取代了旧时代的回调函数,下面我们就来看看具体是如何使用链式调用的吧
1 | function test1(name) { |
上述代码会在三秒后打印出 test1 test2 test3
,最终结果是根据前三个返回promise的函数resolve出来的结果拼接而成,可以看到整个调用流程非常清晰易懂,完全避免了回调嵌套的问题
需要注意的是,如果我们在函数中直接返回 非promise 的值,那么其值会作为下一个then里的函数的参数