- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?
Promise 是处理异步代码的一种技术,也称为脱离回调地狱的头等舱门票。
?编辑
3 承诺状态
待定状态
已解决状态
拒绝状态
理解 JavaScript Promis
什么是承诺?
通常,承诺被定义为最终可用的值的代理。
Promise 多年来一直是 JavaScript 的一部分(在 ES2015 中标准化并引入)。最近,async和await关键字(在 ES2017 中引入)更深入地集成和清理了 JavaScript 中 Promise 的语法。
异步函数在幕后使用 Promise,因此 - 特别是随着当今的分布式云架构变得越来越普遍 - 了解 Promise 是什么以及它们如何工作比以往任何时候都更加重要!
现在我们知道承诺很重要,让我们深入探讨一下。
Promise 如何发挥作用(简要说明)
你的代码调用了一个承诺。该承诺将以所谓的待处理状态开始。这是什么意思?
这意味着调用函数将在 Promise 挂起时继续执行。一旦承诺得到解决,调用函数将获取承诺所请求的数据。
Promise 开始于待处理状态,最终以已解决状态或拒绝状态结束。
无论最终结果是处于已解决状态的承诺还是处于拒绝状态的承诺,都将调用回调。
我们定义两个单独的回调。
当 Promise 以已解决状态结束时,一个回调会处理从 Promise 返回的数据。
当 Promise 以拒绝状态结束时,另一个回调处理 Promise 返回的数据。
我们通过将回调函数传递给then 来定义处理以已解决状态结束的 Promise 数据的回调函数。
我们通过将回调函数传递给catch来定义处理以拒绝状态结束的 Promise 数据的回调函数。
使用 axios npm 库的示例
axios.get(endpoint)
? ? .then(data = resolvedPromiseCallbackFunction(data))
? ? .catch(errors = rejectedPromiseCallbackFunction(errors))
哪些 JavaScript API 使用 Promise?
您自己的代码和库很可能自始至终都使用 Promise。值得注意的是,Promise 实际上是由标准现代 Web APIS 使用的。这里有几个也使用 Promise 的 Web API。
\o 服务工作者 API 服务工作者 API
\o 获取API 获取API
在现代 JavaScript 中,您不太可能发现自己处于不使用 Promise 的情况 - 所以让我们深入研究并开始理解它们。
创造承诺
JavaScript 有一个 Promise API。Promise API 公开了一个 Promise 构造函数,您可以使用以下方法对其进行初始化new Promise():
let complete = trueconst hasItCompleted = new Promise((resolve, reject) = {
? if (complete) {
? ? ?const completed = Here is the thing I built
? ? ?resolve(completed)
? } else {
? ? const withReason = Still doing something else
? ? reject(withReason)
? }})
如图所示,我们检查complete全局常量。如果complete为 true,则 Promise 切换到已解决状态(也称为解析回调,它将 Promise 切换到已解决状态)。否则,如果complete为 false,则reject执行回调,将 Promise 置于拒绝状态。
好吧 - 很简单,如果我们调用回调resolve,那么我们的 Promise 就会切换到已解决状态,就像我们使用reject回调一样,我们的 Promise 会切换到拒绝状态。但这给我们留下了一个问题。
如果我们既不调用resolve也不调用reject回调怎么办?好吧,正如您可能正在组合的那样,承诺仍处于待处理状态。
很简单,三个状态 - 两个回调函数切换到Resolved State或Rejected State,如果我们都不调用回调,那么我们只是保持在Pending State。
有前途
您可能遇到的一个更常见的例子是一种称为Promisifying 的技术。
Promisifying是一种能够使用接受回调的经典 JavaScript 函数并让它返回一个 Promise 的方法:
const fileSystem = require(fs)const getFile = file =
您可能关注的文档
最近下载
- 部编版四年级上册写字表字帖1.pdf
- 《声环境质量标准》(GB3096-2008).pdf VIP
- 新湘文艺版高中音乐必修“歌唱”第二单元第七节《歌唱的艺术处理——菩提树》说课稿.doc
- 2024-2025学年深圳市南山区四上数学期末试卷及答案.docx
- 2024年中央国家机关公务员录用考试行政职业能力测试真题及答案解析省级以上完整+答案+解析.doc VIP
- 北师大版(2019)高中英语选择性必修第二册 Unit5 Lesson3 公开课课件.pptx
- 小学开学收心家长会PPT课件.pptx
- 广东省2024年中考数学试卷【含答案】.pptx VIP
- 湘教版四年级生命生态安全呵护呼吸系统健康.ppt VIP
- ADuM1200-1201中文资料.pdf
文档评论(0)