首页 > 编程语言 >在JavaScript中,函数前加`async`和不加`async`的区别

在JavaScript中,函数前加`async`和不加`async`的区别

时间:2024-06-04 12:44:21浏览次数:35  
标签:await 前加 JavaScript Promise 不加 error async 函数

在JavaScript中,函数前加async和不加async主要有以下区别:

  1. 返回值类型

    • async:使用async关键字声明的函数总是返回一个Promise对象。这意味着,无论函数中返回的是什么值,它都会被自动包装在一个Promise中。
    • 不加async:普通函数返回的是其执行结果,它不会自动包装在Promise中。如果需要返回一个Promise,你需要手动创建并返回它。
  2. 内部使用await

    • asyncasync函数内部可以使用await关键字来等待Promise的解决(resolve)或拒绝(reject)。await会暂停async函数的执行,直到等待的Promise完成。
    • 不加async:普通函数中不能使用await关键字,因为await只能在async函数内部使用。
  3. 错误处理

    • async:在async函数中,如果抛出异常,这个异常会被Promise捕获,并导致Promise被拒绝(reject)。可以通过.catch()方法来捕获和处理这些异常。
    • 不加async:在普通函数中抛出的异常需要通过其他方式来捕获和处理,例如使用try...catch语句。
  4. 代码风格

    • asyncasync函数使得异步代码的编写更加接近同步代码的风格,这可以提高代码的可读性和可维护性。
    • 不加async:普通函数需要使用回调函数、Promise链式调用或async/await(如果返回的是Promise)来处理异步操作,这可能会使代码更加复杂。

下面是一个简单的例子来说明这些区别:

// 普通函数
function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => resolve('Data fetched'), 1000);
    });
}

// 使用普通函数和Promise链式调用
fetchData()
    .then(data => console.log(data))
    .catch(error => console.error(error));

// async函数
async function fetchDataAsync() {
    return 'Data fetched';
}

// 使用async函数和await
async function fetchDataAndProcessAsync() {
    try {
        const data = await fetchDataAsync(); // 等待Promise解决
        console.log(data);
    } catch (error) {
        console.error(error);
    }
}

在这个例子中,fetchData是一个普通函数,它返回一个Promise。而fetchDataAsync是一个async函数,它也返回一个Promise,但可以内部使用await来等待其他Promise的解决。

标签:await,前加,JavaScript,Promise,不加,error,async,函数
From: https://www.cnblogs.com/cnyjh/p/18230541

相关文章

  • JavaScript 验证 API
    目录什么是JavaScript验证API常见的JavaScript验证API约束验证DOM方法getElementById()方法:getElementsByTagName()方法:getElementsByClassName()方法:querySelector()方法:querySelectorAll()方法setAttribute()方法:getAttribute()方法:removeAttribute()方......
  • javaScript基础22
    一、概念一门客户端脚本语言运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎脚本语言:不需要编译,直接就可以被浏览器解析执行了二、功能可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验。三、JavaScript发......
  • TypeScript与JavaScript之间的关系
    TypeScript是一种JavaScript的超集语言,这意味着任何有效的JavaScript代码在TypeScript中都是合法的。TypeScript的设计并不意图打破或改变JavaScript的语法,因此您可以将现有的JavaScript代码直接放入TypeScript文件中,无需担心代码的结构或格式。然而,TypeScript不仅仅是JavaScrip......
  • JavaScript第三讲:解锁JavaScript的数据世界:基本数据类型与类型转换的奥秘
    前言:hello,大家好,在JavaScript的编程世界中,数据是构成一切的基础。无论是构建复杂的Web应用,还是处理用户输入,我们都无法绕开数据这一核心元素。而在JavaScript中,数据以不同的形式存在,我们称之为数据类型。理解这些数据类型以及它们之间的转换关系,对于编写高效、健壮的代码至关......
  • JavaScript 事件循环竟还能这样玩!
    JavaScript是一种单线程的编程语言,这意味着它一次只能执行一个任务。为了能够处理异步操作,JavaScript使用了一种称为事件循环(EventLoop)的机制。本文将深入探讨事件循环的工作原理,并展示如何基于这一原理实现一个更为准确的setTimeout、setInterval什么是事件循环?事件循环是......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript公司网站(自行车)
    HTML+CSS+JS【公司网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • javaScript基础一
    javaScript系列文章目录文章目录系列文章目录前言一、<script>元素二、语言基础1.1.区分大小写1.2.读入数据1.3注释1.4严格模式(strictmode)三、变量四、数据类型总结前言本文将简单的讲解JavaScript的基础预备知识一、<script>元素将JavaScript插入HTML的主要......
  • 【JavaScript脚本宇宙】从i18next到Date-fns:国际化和本地化库
    跨越JavaScript新境界:六大库全面评测前言本文将详细介绍六种具有不同功能的JavaScript库,包括处理多语言支持、全球化和本地化、格式化日期、数字和字符串,解析、验证、操作、显示日期和时间,格式化和操作数字,以及最全面、最简单和一致的工具集用于处理JavaScript中的日期等......
  • HTML期末学生大作业-基于班级校园我的校园网页设计与实现html+css+javascript
    ......
  • HTML期末作业-基于HTML+CSS+JavaScript制作学生信息管理系统模板
    ......