ES(ECMAScript)之Promise

2022-12-18 0 1,063

ES(ECMAScript)之Promise

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() 展开初始化:

ES(ECMAScript)之Promise

正如您所看到的,promise会检查全局常量done,如果是true,将回到resolve,否则将回到reject。

采用resolve和reject我们可以回到两个值,在上面的例子中我们只回到两个字符串,但它也可以是两个对象。

采用promise

在上一节中,我们介绍了如何创建promise,那时让我们看看如何采用promise。

ES(ECMAScript)之Promise

运行checkIfItsDone()将继续执行两个promise isItDoneYet() 并采用then反弹等候回到,如果有错误,它将在catch反弹中处置。

链式promise

promise可以回到另两个promise,创建两个链式promise。

链式promise两个很好的例子是由F

Fetch API是一类基于promise的机制,初始化fetch()相当于采用new Promise()定义我们他们的promise。

链接promise的例子

ES(ECMAScript)之Promise

在这个例子中,我们初始化fetch()从todos.json文件中得到todos列表,我们创建了两个链式promise。

运行fetch()会回到两个response,这个response有许多属性:

ES(ECMAScript)之Promise

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数据:

ES(ECMAScript)之Promise

我们将json数据打印到控制台。

处置错误

在上一节示例中,我们有两个附加到promise链的catch。

当promise链中产生错误或promise reject时,控制语句将转到链中最近的catch()语句。

ES(ECMAScript)之Promise

级联错误

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

ES(ECMAScript)之Promise

编排promise

Promise.all()

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

例子:

ES(ECMAScript)之Promise
举报/意见反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务