首页 > 编程语言 >JavaScript中的 "return await promise" 与 "return promise"

JavaScript中的 "return await promise" 与 "return promise"

时间:2023-08-02 23:03:40浏览次数:41  
标签:function await return JavaScript promise promisedDivision async


当从异步功能中返回时,您可以等待该承诺得到解决,或者您可以直接返回它:return await promise return promise:

js async function func1() { const promise = asyncOperation(); return await promise; } // vs async function func2() { const promise = asyncOperation(); return promise; }

您很快就会看到这两种表达方式都有效。

但是,当这些表达方式不同时,是否有情况?让我们来看看!

1. 相同行为

为了找到两个表达式(与)的区别,(return await promise vs return promise), 我要使用辅助功能。 delayedDivide(n1, n2).

该函数除以 2 个数字,并返回以承诺包裹的分区结果:

javascript function promisedDivision(n1, n2) { if (n2 === 0) { return Promise.reject(new Error("Cannot divide by 0")); } else { return Promise.resolve(n1 / n2); } }

如果第二个(二维索)论点是,该函数返回拒绝的承诺,因为无法按分除。00

好的,定义帮手功能,让我们划分一些数字。

下列功能使用表达方式,通过包裹在承诺中返回划分: divideWithAwait() uses return await promisedDivision(6, 2)  6 by 2 :

javascript async function divideWithAwait() { return await promisedDivision(6, 2); } async function run() { const result = await divideWithAwait(); console.log(result); // logs 3 } run();

Try the demo.

在函数内,表达式会对部门结果进行评估。都很好run()``await divideWithAwait()``3

现在,让我们尝试使用没有关键字的第二个表达式,并直接返回包装部门结果的承诺:await``return promisedDivision(6, 2)

javascript async function divideWithoutAwait() { return promisedDivision(6, 2); } async function run() { const result = await divideWithoutAwait(); console.log(result); // logs 3 } run();

Try the demo.

即使不使用内部的关键字,功能内的表达仍然正确地评估为! await keyword inside divideWithoutAwait()await divideWithoutAwait()   run()  6 / 2  3!

在此步骤中,您已经看到使用和没有区别 return await promise and return promise 至少在处理成功履行承诺时。

但是,让我们搜索更多!

2. 不同行为

现在,让我们采取另一种方法,特别是尝试与被拒绝的承诺合作。要使功能返回被拒绝的承诺,让我们设置第二个参数。promisedDivision(n1, n2)0

因为现在会返回被拒绝的承诺,让我们也包装到一个 - 看看被拒绝的承诺是否被抓住。promisedDivision(n1, 0)try {... } catch (error) {...}

好的,让我们使用关键字的表达方式:return await promisedDivision(5, 0)await

javascript async function divideWithAwait() { try { return await promisedDivision(5, 0); } catch (error) { // Rejection caught console.log(error); // logs Error('Cannot divide by 0') } } async function run() { const result = await divideWithAwait(); } run();

Try the demo.

因为零分是不可能的,因此返回被拒绝的承诺。成功抓住了被拒绝的承诺抛出。promisedDivision(5, 0)catch(error) { ... }promisedDivision(5, 0)

第二种方法呢?其中省略了哪些方法?await

javascript async function divideWithoutAwait() { try { return promisedDivision(5, 0); } catch (error) { // Rejection NOT caught console.log(error); } } async function run() { const result = await divideWithoutAwait(); } run(); // Uncaught Error: Cannot divide by 0

Try the demo.

然而,这一次没有兑现被拒绝的承诺。catch(error) { ... }

现在,您可以轻松地看到使用和:return await promisereturn promise

当被包裹起来时,附近的渔获物只有在等待承诺时才会被拒绝(这是事实)。try { ... }catch(error) { ... }promisereturn await promise`).

3. 结论

在大多数情况下,特别是如果承诺成功解决,使用和使用之间没有太大的区别。return await promisereturn promise

但是,如果你想抓住拒绝的承诺,你从异步功能返回,那么你绝对应该使用表达和故意添加。return await promiseawait

`catch(error) {...}声明捕获只等待拒绝的承诺在声明中。try {...}

喜欢这个帖子?请分享!

标签:function,await,return,JavaScript,promise,promisedDivision,async
From: https://blog.51cto.com/owenzhang24/6944098

相关文章

  • JavaScript基础03
    流程控制语句----循环语句循环条件---可以是次数可以状态whilewhile(循环条件){循环体代码}do-whiledo{循环体代码}while(循环条件)do-while和while的区别do-while至少会执行一次循环体代码因为do-while执行过程是先执行一次循环体代码再判断循环条件执......
  • JavaScript中介者模式:解耦组件之间的依赖关系
    JavaScript中介者模式在前端开发中,组件之间的依赖关系往往会导致代码的复杂性和可维护性降低。为了解决这个问题,我们可以使用中介者模式来解耦组件之间的依赖关系。本文将介绍JavaScript中介者模式的概念和使用方法,并通过一个实例来说明其应用。什么是中介者模式?中介者模式是一......
  • 解决 Vue 重复点击相同路由,出现 Uncaught (in promise) NavigationDuplicated: Avoide
    解决Vue重复点击相同路由,出现Uncaught(inpromise)NavigationDuplicated:Avoidedredundantnavigation问题问题问题描述:重复点击导航时,控制台出现报错,虽然不影响功能使用,但也不能视而不见。解决方案方案一:只需在router文件夹下,添加如下代码。constrouter=new......
  • JavaScript学习 -- SM4算法应用实例
    SM4算法,也被称为国密算法,是中国公布的一种高效且安全的对称加密算法。在JavaScript中,我们可以通过使用CryptoJS库来实现SM4算法的加密和解密。本篇博客将为您介绍如何在JavaScript中使用SM4算法,并提供一个实际的案例。首先,确保您已经引入了CryptoJS库。以下是一个使用SM4算法进行加......
  • Lazada shoppe Get Lazada Product Details API Return Value Description
     lazada.item_getRequestParametersRequestParameters:num_iid=267690734&nation=co.thParameterDescription:num_iid:lazadacommodityID(IstheIDofthecorrespondingcountryanddifferentcountriescannotbecommon)nation:countryTheoptionalvaluesfo......
  • javaScript基础(3)
    string字符串1.字符串必须用‘’或者“”,引起来的一段字符内容,在表示字符串的时候,不能在双引号表示的字符串中使用双引号2.字符串可以是空的字符串3.字符串双引号或者单引号里可以嵌套另一种字符串的引号4.空格在字符串里是占位的varsty1=“123123”5.获取字符串......
  • javascript按钮通过cookie限制60s后才可以点击
    javascript按钮通过cookie限制60s后才可以点击1️⃣首先创建一个html页面,放入一个按钮 2️⃣设置点击按钮的触发函数一般当点击按钮都会有一些业务需要,在需求结束后,触发saveCookie的方法 3️⃣saveCookie方法当点击查询按钮之后,触发saveCooike方法,按钮倒计时需要一个结束......
  • 计算机基础与JavaScript初识
    一:编程介绍编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程.计算机程序:就是计算机所执行的一系列的指令集合,而程序全部都是用我们所掌握的语言来编写的,所以人们要控制计算机一定要通过计算机语言向计算机发出命令。从事编程的人员,就是程......
  • mvc的return view复选框反填
    首先我后台返回的是选中的复选框id字符串,把这个字符串绑定到一个控件上             在文档就绪函数获取要反填的id字符串和复选框元素,遍历多选框元素并设置选中状态,最后刷新表单。  ......
  • JavaScript基础02
    隐式类型转换加法运算中,如果参与运算的有一个值不是数字,另外一个值是数字,会将数字隐式转换成字符串再与数字进行拼接减乘除取余运算中,如果有非数字,会将它隐式转成数值,然后参与运算;如果参与运算存在NaN,那么得到的是NaN运算符算术运算符+-*/%一元运算符++自增--自......