第三章: Promises
在第二章中,我们定位了在使用回调表达程序异步性和管理并发的两个主要类别的不足:缺乏顺序性和缺乏可靠性。现在我们更亲近地理解了问题,是时候将我们的注意力转向解决它们的模式了。
我们首先想要解决的是 控制倒转 问题,信任是如此脆弱而且是如此的容易丢失。
回想一下,我们将我们的程序的延续包装进一个回调函数中,将这个回调交给另一个团体(甚至是潜在的外部代码),并双手合十祈祷它会做正确的事情并调用这个回调。
我们这么做是因为我们想说,“这是 稍后 将要发生的事,在当前的步骤完成之后。”
但是如果我们能够反向倒转这种 控制倒转 呢?如果不是将我们程序的延续交给另一个团体,而是希望它返回给我们一个可以知道它何时完成的能力,然后我们的代码可以决定下一步做什么呢?
这种规范被称为 Promise。
Promise正在像风暴一样席卷JS世界,因为开发者和语言规范作者之流拼命地想要在他们的代码/设计中结束回调地狱的疯狂。事实上,大多数新被加入JS/DOM平台的异步API都是建立在Promise之上的。所以深入学习它们可能是个好主意,你不这么认为吗?
注意: “立即”这个词将在本章频繁使用,一般来说它指代一些Promise解析行为。然而,本质上在所有情况下,“立即”意味着就工作队列行为(参见第一章)而言,不是严格同步的 现在 的感觉。