# 什么是Promise呢?
ES6
中一个非常重要和好用的特性就是 Promise
Promise
是异步编程的一种解决方案。
一种很常见的场景应该就是<mark>网络请求</mark>了。
我们封装一个网络请求的函数,因为不能立即拿到结果,所以不能像简单的3+4=7一样将结果返回。
所以往往我们会传入另外一个函数,在数据请求成功时,将数据通过传入的函数回调出去。
如果只是一个简单的网络请求,那么这种方案不会给我们带来很大的麻烦。
# 网络请求的回调地狱
但是,当网络请求非常复杂时,就会出现回调地狱。
这样的 代码难看而且不容易维护。
Promise
可以以一种非常优雅的方式来解决这个问题。
# Promise的基本使用
## Promise三种状态
首先, 当我们开发中有异步操作时, 就可以给异步操作包装一个 Promise
异步操作之后会有三种状态
我们一起来看一下这三种状态:
pending
:等待状态,比如正在进行网络请求,或者定时器没有到时间。fulfill
:满足状态,当我们主动回调了resolve
时,就处于该状态,并且会回调.then()
reject
:拒绝状态,当我们主动回调了reject
时,就处于该状态,并且会回调.catch()
## Promise的链式调用
我们在看 Promise
的流程图时,发现无论是 then
还是 catch
都可以返回一个 Promise
对象。
所以,我们的代码其实是可以进行链式调用的:
这里我们直接通过 Promise
包装了一下新的数据,将 Promise
对象返回了
Promise.resovle()
:将数据包装成Promise
对象,并且在内部回调resolve()
函数Promise.reject()
:将数据包装成Promise
对象,并且在内部回调reject()
函数
## 链式调用简写
简化版代码:
如果我们希望数据直接包装成 Promise.resolve
,那么在 then
中可以直接返回数据
注意下面的代码中,我讲 return Promise.resovle(data)
改成了 return data
结果依然是一样的