Understanding Promises
What a Promise is, how the state machine works, and how to chain async operations with then, catch, and async/await.
「Promise」这个词是承诺,在代码里的含义其实挺贴切:我承诺给你一个结果,但现在还没有,等我好了再告诉你。
理解 Promise,得从两个层面去说。
Promises/A+ 规范先于 ES6 存在。它是社区定义的标准,出现在语言层面的 Promise 之前,用来解决回调地狱和各种库之间异步处理不统一的问题。规范的核心就一句话:任何对象,只要有一个行为符合规范的 then 方法,就是 Promise。
1
2
3
const p = {
then: function () {},
};
规范详细描述了 then 方法应该接收什么参数、返回什么、如何处理链式调用。在 2015 年之前,很多第三方库(比如 jQuery、bluebird)都按这个规范实现了自己的异步方案,彼此可以互操作。
ES6 的 Promise 是语言层面的实现,new Promise() 出来的对象满足 Promises/A+ 规范,同时加了 catch、finally、all、race 等静态方法。
所以「Promise」不是某一个具体的类,而是一种行为规范:满足规范的都算 Promise,满足规范的就能互操作。ES6 的 Promise 只是目前最通用的那个实现。
This post is licensed under CC BY 4.0 by the author.