首页 > 编程语言 >Javascript:承诺

Javascript:承诺

时间:2022-08-31 09:02:36浏览次数:81  
标签:状态 javascript 承诺 代码 Javascript promise Promise

Javascript:承诺

Javascript Promises

为了理解 javascript 中的 Promise,理解回调函数及其带来的挑战至关重要。您可以从我以前的博客中了解更多信息。

[

Javascript:回调函数

如果您是 javascript 开发人员,那么回调函数是最关键的概念之一。在这篇文章中,我将...

媒体网

](/@ruchivora16/javascript-callback-functions-63533025f32c)

[

Javascript:回调函数的陷阱

Promise 可能是您在学习 javascript 时听说过的东西。一个正在学习的初学者……

媒体网

](/@ruchivora16/javascript-pitfall-of-a-callback-function-255948dde9d4)

为什么我们需要承诺?

回调程序的两个主要缺陷是 回调地狱和控制反转 . Javascript 承诺解决控制反转问题 . Promise 提供了知道任务何时完成的能力,然后将控制权交还给程序/代码以决定下一步该做什么。与回调相反,其中将控制权交给另一方(第三方 API/代码)。

什么是承诺?
想象一下这样的场景:我走到一家快餐店的柜台前,点了一份意大利面 arrabbiata。我支付了金额,作为回报,收银员返回给我一张收据,上面有提到的订单号。这张收据只不过是一张保证我最终(将来)会收到我的意大利面的承诺书。 或者 即使出现问题,说餐厅没有 arrabbiata 酱,那么至少我可以要求退款并想办法吃别的东西。
通过这个类比,我们可以看到未来价值观的一个重要特征:它们可以表示成功或失败。 所以 **** 每次我点意大利面时,我都知道我要么会得到意大利面,要么会收到悲伤的消息。

这个类比不太准确,javascript 承诺比这更复杂。但没关系,开始......

承诺的语法是:

 让 promise = new Promise( (resolve,reject) => {  
 // 需要一些时间才能执行的代码。例如:做意大利面的时间  
 })

传递给的函数 新的承诺 有两个由javascript提供的回调函数resolve()和reject()。当 promise 中的代码被执行时,它应该调用以下回调函数之一:
- resolve(value):如果代码执行成功,则返回一个值。例如:从我们的类比来看,如果我们成功地收到了意大利面。
-reject(error):如果代码执行失败,则返回错误。例如:根据我们的类比,如果我们收到坏消息,因为餐厅缺少 arrabbiata 酱汁。

新的 Promise 构造函数 返回一个承诺对象 它具有以下属性:
- state:最初,promise 在 待办的 状态 ,那么它可以在 完成 状态 当 resolve() 被调用或者它可以在 被拒绝 状态 如果拒绝()被调用。
- 结果:最初是 不明确的 ,当 resolve(value) 被调用时,它包含 价值 或者它包含一个 错误 如果拒绝(错误)返回。

Promises in javascript

以我们的类比为例,看看代码是如何执行的。

Promise in pending state and result is undefined

在上面的代码示例中,传递给新 Promise 构造函数的函数有两个回调函数(resolve、reject)。代码在五秒后执行,并根据条件,解决或拒绝返回值或错误的承诺。当代码执行暂停五秒钟时,promise 处于 待办的 状态结果 不明确的。

五秒钟后 承诺的状态从待定更改为已完成结果的值从未定义更改为已解决 价值 (即你的意大利面准备好了!!)

Promise in fulfilled state and result changes from undefined to resolved value

如果 arrabbiata 酱不可用,则 Promise 处于拒绝状态,结果为 reject() 值(即抱歉,我们不能为您提供意大利面)

Promise in rejected state and result changes from undefined to rejected value

then()、catch() 和 finally() 方法

因此,promise 可以处于以下状态之一,即挂起、已完成和已拒绝状态。当承诺被履行或处于拒绝状态时,它被称为 承诺已成定局 .

当 Promise 处于已完成状态时,您可以在 Promise 的 then() 方法中访问已解析的数据。

当 Promise 处于被拒绝状态时,您可以在 Promise 的 catch() 方法中访问错误信息。

finally() 方法在所有情况下都会执行,无论 promise 是被实现还是被拒绝。

基本上,根据承诺的状态,可以决定进一步的行动。继续我们对意大利面的类比,考虑下面的代码。

The Promise is fulfilled and .then() method is executed

在示例中,当我们收到意大利面时(promise 处于已完成状态),然后执行 then() 中的代码并 点一杯可乐 被打印。此外,finally() 中的代码被执行,并且 我可以安然入睡 被打印。

The Promise is rejected and .catch() method is executed

在示例中,我们需要订购一个三明治(promise 处于拒绝状态),因此 catch() 中的代码被执行并 订购三明治 被打印。此外,无论 promise 的状态如何,finally 中的代码总是被执行。

在下一篇博客中,我会写一些关于 Promise 链和微任务队列的文章,这将帮助你理解 async 和 await 关键字的重要性……。

如果您有任何疑问或建议,请随时在下面发表评论......

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/2970/49283108

标签:状态,javascript,承诺,代码,Javascript,promise,Promise
From: https://www.cnblogs.com/amboke/p/16641717.html

相关文章

  • Javascript中的链表
    Javascript中的链表数据结构的介绍文章。链表概念与应用于Javascript语言的实际示例。介绍数据结构是一种有效处理大量数据的手段,了解它的结构和组成为我们提供了更......
  • JavaScript 中的全局变量解释
    JavaScript中的全局变量解释****全局变量被定义在函数之外或在整个程序中使用的窗口对象旁边(除非被本地人遮蔽)。即使您声明一个变量而不使用var,它仍然会被解释为全局......
  • 函数,JavaScript 的核心。
    函数,JavaScript的核心。我听说函数被称为“心,”“灵魂,“和”国王”的JavaScript。他们试图强调JavaScript函数的重要性。让我们试着理解为什么函数对JavaSc......
  • 使用 JavaScript Map Method 组合 mongo 查询的算法
    使用JavaScriptMapMethod组合mongo查询的算法假设您有大量数据,并且您想查找选定品牌的特定产品,例如尼卡化妆品和一个特定的类别,例如润唇膏从中。你的代码看起来......
  • 基础知识——在 5 分钟内了解 Javascript 基础知识。
    基础知识——在5分钟内了解Javascript基础知识。对新开发人员的快速且有价值的Javascript审查。如果你和我一样,你喜欢编码,但在学习新事物几天后很难记住基本概念。......
  • 回调、承诺和异步/等待
    回调、承诺和异步/等待source:自由派我目前正在更深入地研究JS的工作原理,并且我一直在观看WillSentance的JavaScript:TheHardParts课程.其中一个部分是关......
  • 工具函数(JavaScript)——如何判断设备是不是移动端
    浏览器有一个Navigator接口,表示用户代理的状态和标识。Navigator.userAgent可以知道客户端的设备类型。请求的请求标头有一个user-agent字段,内容中包含了设备型号的信......
  • 关于 JavaScript 函数的思考
    函数可以将一堆重复的代码整合成一个整体,在需要改变的地方通过参数传值来改变。比如,根据类型查询数据,接口返回的数据一样,后续处理这个数据的逻辑也是一样的,只有类型和输入......
  • JavaScript 引擎,一个真实的故事(第 1 部分)
    JavaScript引擎,一个真实的故事(第1部分)一个任何使用过JavaScript的人都可能熟悉V8引擎。大多数人都知道JavaScript在单线程中运行并使用回调,这对于语言引擎背后......
  • Javascript解构赋值
    Javascript解构赋值解构赋值语法是一种Javascript表达式。通过解构赋值可以将属性/值从对象/数组中取出,赋值给其他变量引用链接语法vara,b,rest;[a,b]=[......