
promises概要
Promise是处置触发器标识符的一类方式,无须在标识符中撰写太多反弹。
promise早已存有十多年,在ES2015中展开了技术标准和导入,那时它早已被ES2017中的触发器表达式所替代。
触发器表达式采用promise API做为此基础,因而认知promise是必要性的。
promises组织工作基本原理
除非初始化了promise,它将开启两个挂起状况。此时eval拒绝继续执行,与此同时等候promise继续执行他们的处理,并给eval提供更多许多意见反馈。
此时,eval会等候promise回到两个状况,但JavaScript是触发器的,因而promise在组织工作这时候,表达式会拒绝继续执行。
什么样javascript API采用promise?
除了您他们的标识符和标识符库之外,Promises还被标准的现代Web API采用,例如:
the Battery API the Fetch API Service Workers在现代web应用开发中,你一定会用到promise,因而让我们深入了解它。
创建两个promise
Promise API公开了两个Promise构造表达式,您可以采用 new Promise() 展开初始化:

正如您所看到的,promise会检查全局常量done,如果是true,将回到resolve,否则将回到reject。
采用resolve和reject我们可以回到两个值,在上面的例子中我们只回到两个字符串,但它也可以是两个对象。
采用promise
在上一节中,我们介绍了如何创建promise,那时让我们看看如何采用promise。

运行checkIfItsDone()将继续执行两个promise isItDoneYet() 并采用then反弹等候回到,如果有错误,它将在catch反弹中处置。
链式promise
promise可以回到另两个promise,创建两个链式promise。
链式promise两个很好的例子是由F
Fetch API是一类基于promise的机制,初始化fetch()相当于采用new Promise()定义我们他们的promise。
链接promise的例子

在这个例子中,我们初始化fetch()从todos.json文件中得到todos列表,我们创建了两个链式promise。
运行fetch()会回到两个response,这个response有许多属性:

status,表示HTTP状况标识符的数值statusText,状况消息,如果请求成功,则为OKresponse还有两个json()方式,它回到两个promise,它将解析body内容并转换为JSON。
这个链式promise,继续执行流程是:链中的第两个promise是我们定义的两个表达式,名为status(),它检查response状况,如果它不是成功response(在200和299之间),将回到reject。
reject操作将导致promise链直接跳到catch()语句,记录Request failed text以及错误消息。
如果成功,它会初始化json()表达式。当前面两个promise成功回到response对象时,我们将这个response做为第二个promise的输入参数。
在这种情况下,回到JSON格式的数据,因而第三个promise直接接收这个JSON数据:

我们将json数据打印到控制台。
处置错误
在上一节示例中,我们有两个附加到promise链的catch。
当promise链中产生错误或promise reject时,控制语句将转到链中最近的catch()语句。

级联错误
如果在catch()内部引发错误,则可以附加第二个catch()来处置它,依此类推。

编排promise
Promise.all()
如果你需要同步多个promise,Promise.all()可以帮助你定义两个promise列表,并在它全部解析后继续执行。
例子:
