网站大量收购闲置独家精品文档,联系QQ:2885784924

JavaScript Promise 的真正工作原理.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 =

文档评论(0)

知识贩卖机 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档