Promise 是异步编程的一种解决方案, 它是一个对象, 可以获取异步操作的消息, 他的出现大大改善了异步编程的困境, 避免了地狱回调, 它比传统的解决方案回调函数和事件更合理和更强大。
所谓 Promise, 简单说就是一个容器, 里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说, Promise 是一个对象, 从它可以获取异步操作的消息。Promise 提供统一的 API, 各种异步操作都可以用同样的方法进行处理。
Pending(进行中)Resolved(已完成)Rejected(已拒绝)当把一件事情交给 promise 时, 它的状态就是 Pending, 任务完成了状态就变成了 Resolved、没有完成失败了就变成了 Rejected。
pending -> fulfilled : Resolved(已完成)pending -> rejected : Rejected(已拒绝)注意: 一旦从进行状态变成为其他状态就永远不能更改状态了。
promise 对象代表一个异步操作, 有三种状态, pending(进行中)、fulfilled(已成功)、rejected (已失败)。只有异步操作的结果, 可以决定当前是哪一种状态, 任何其他操作都无法改变这个状态, 这也是 promise 这个名字的由来——“承诺”promise 对象的状态改变, 只有两种可能: 从 pending 变为 fulfilled, 从 pending 变为 rejected。这时就称为resolved (已定型)。如果改变已经发生了, 你再对 promise 对象添加回调函数, 也会立即得到这个结果。这与事件(event)完全不同, 事件的特点是:如果你错过了它, 再去监听是得不到结果的Promise, 一旦新建它就会立即执行, 无法中途取消Promise 内部抛出的错误, 不会反应到外部pending 状态时, 无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)Promise 对象是异步编程的一种解决方案, 最早由社区提出。Promise 是一个构造函数, 接收一个函数作为参数, 返回一个 Promise 实例。一个 Promise 实例有三种状态, 分别是pending、resolved 和rejected, 分别代表了进行中、已成功和已失败。实例的状态只能由 pending 转变 resolved 或者 rejected 状态, 并且状态一经改变, 就凝固了, 无法再被改变了。
状态的改变是通过 resolve() 和 reject() 函数来实现的, 可以在异步操作结束后调用这两个函数改变 Promise 实例的状态, 它的原型上定义了一个 then 方法, 使用这个 then 方法可以为两个状态的改变注册回调函数。这个回调函数属于微任务, 会在本轮事件循环的末尾执行。
注意: 在构造 Promise 的时候, 构造函数内部的代码是立即执行的。