总结
Promise 被设计用于改善 JS 中的异步编程,与事件及回调函数对比,在异步操作方面为你提供了更多的控制权与组合性。Promise 调度被添加到 JS 引擎作业队列, 以便稍后执行。不过此处有另一个作业队列追踪着 Promise 的完成与拒绝处理函数,以确保适当的执行。
Promise 具有三种状态:挂起、已完成、已拒绝。一个 Promise 起始于挂起态,并在成功时转为完成态,或在失败时转为拒绝态。在这两种情况下,处理函数都能被添加以表明 Promise 何时被解决。then() 方法允许你绑定完成处理函数与拒绝处理函数,而 catch() 方法则只允许你绑定拒绝处理函数。
你能用多种方式将多个 Promise 串联在一起,并在它们之间传递信息。每个对 then() 的调用都创建并返回了一个新的 Promise,在前一个 Promise 被决议时,新 Promise 也会被决议。Promise 链可被用于触发对一系列异步事件的响应。 你还能使用 Promise.race() 与 Promise.all() 来监视多个 Promise 的进程,并进行相应的响应。
组合使用生成器与 Promise 会让异步任务运行得更容易,这是由于 Promise 提供了异步操作可返回的一个通用接口。这样你就能使用生成器与 yield 运算符来等待异步响应,并作出适当的应答。
多数新的 web API 都基于 Promise 创建,并且你可以期待未来会有更多的效仿之作。