Promise 在之前 ES6 的阶段就完成了。 - 更多
下面,更多的是 回顾

# 什么是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
结果依然是一样的