iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中的async函数怎么使用
  • 794
分享到

JavaScript中的async函数怎么使用

2023-07-04 12:07:30 794人浏览 泡泡鱼
摘要

本篇内容主要讲解“javascript中的async函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的async函数怎么使用”吧!async函数async函数的返

本篇内容主要讲解“javascript中的async函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的async函数怎么使用”吧!

async函数

async函数的返回值为 promise 对象,promise对象的结果由async函数执行的返回值决定。async函数能使得异步操作变得更加方便,简而言之就是 Generator 的语法糖。

定义async函数,特点是即便函数内部返回结果不是promise对象,调用函数其最后的返回结果依然是promise对象,代码如下:

如果返回的结果不是 Promise 对象的情况下:

<script>    async function fn(){        // 返回的结果是字符串        // return '123'        // // 返回的结果是undefined        // return;        // 返回的结果是抛出一个异常        throw new 'error'    }    const result = fn()    console.log(result);</script>

JavaScript中的async函数怎么使用

如果返回的结果是 Promise 对象时,我们正常使用 then 方法即可,如下:

<script>    async function fn(){        return new Promise((resolve,reject)=>{            // resolve('成功的数据')            reject('失败的数据')        })    }    const result = fn()    // 调用 then 方法    result.then((value)=>{        console.log(value);    },(reason)=>{        console.log(reason); // 打印失败的数据    })</script>

await 表达式

通过上文的对 async 介绍,感觉其功能有点鸡肋,其实恰恰不是,而是 async 需要搭配 await 一起使用才能达到语法糖的效果。

await的特点

await必须写在 async 函数中

await右侧的表达式一般为 promise 对象

await返回的是 promise 成功的值

await的 promise 失败了,就会抛出异常,需要通过 try...catch捕获处理

说白了:await就相当于 then 方法的第一个回调函数,只返回成功的值,失败的值需要 try...catch来捕获。

async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

<script>    const p = new Promise((resolve,reject)=>{        // resolve('用户数据')        reject('用户加载数据失败了')    })    async function fn(){        // 为防止promise是失败的状态,加上try...catch进行异常捕获        try {            // await 返回的结果就是 promise 返回成功的值            let result = await p            console.log(result);        } catch (error) {            console.log(error);//因为是失败的状态,所以打印:用户加载数据失败了        }    }    fn()</script>

总结

(1)await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中。

(2)如果有多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。

比如:await Promise.all([a(), b()]),这里简单提一下

(3)await命令只能用在async函数之中,如果用在普通函数,就会报错。

(4)(理解一下async的运行原理) async 函数可以保留运行堆栈,普通函数内部运行一个异步任务时,如果异步任务运行结束普通函数可能早就运行完了,异步任务的上下文环境已经消失了,如果异步任务报错,错误堆栈将不包括普通函数;而async函数内部的异步任务运行时,async函数是暂停执行的,所以一旦async函数内部的异步任务运行报错,错误堆栈将包括async函数。

async使用形式

// 函数声明async function foo() {} // 函数表达式const foo = async function () {}; // 对象的方法let obj = { async foo() {} };obj.foo().then(...) // Class 的方法class Storage {  constructor() {    this.cachePromise = caches.open('avatars');  }   async getAvatar(name) {    const cache = await this.cachePromise;    return cache.match(`/avatars/${name}.jpg`);  }} const storage = new Storage();storage.getAvatar('jake').then(…); // 箭头函数const foo = async () => {};

async读取文件

和之前讲解的 promise 读取文件内容 一样,我们也可以使用async进行文件的读取,代码如下:

// 1.引入 fs 模块const fs = require('fs') // 2.读取文件function index(){    return new Promise((resolve,reject)=>{        fs.readFile('./index.md',(err,data)=>{            // 如果失败            if(err) reject(err)            // 如果成功            resolve(data)        })    })}function index1(){    return new Promise((resolve,reject)=>{        fs.readFile('./index1.md',(err,data)=>{            // 如果失败            if(err) reject(err)            // 如果成功            resolve(data)        })    })}function index2(){    return new Promise((resolve,reject)=>{        fs.readFile('./index2.md',(err,data)=>{            // 如果失败            if(err) reject(err)            // 如果成功            resolve(data)        })    })} // 3.声明一个 async 函数async function fn(){    let i = await index()    let i1 = await index1()    let i2 = await index2()    console.log(i.toString());    console.log(i1.toString());    console.log(i2.toString());}fn()

JavaScript中的async函数怎么使用

async发送AJAX请求

和之前讲解 promise发送ajax请求 一样,我们也可以使用async进行发送ajax请求,代码如下:

<script>    // 发送 AJAX请求,返回的结果是 Promise 对象    function sendAjax(url){        return new Promise((resolve,reject)=>{            // 创建对象            const x = new XMLHttpRequest()             // 初始化            x.open('GET',url)             // 发送            x.send()             // 事件绑定            x.onreadystatechange = function(){                if(x.readyState === 4){                    if(x.status >= 200 && x.status < 300){                        // 如果响应成功                        resolve(x.response)                        // 如果响应失败                        reject(x.status)                    }                }            }        })    }            // promise then 方法测试    // const result = sendAjax("https://ai.baidu.com/").then(value=>{    //     console.log(value);    // },reason=>{})    // async 与 await 测试    async function fn(){        // 发送 AJAX 请求        let result = await sendAjax("https://ai.baidu.com/")        console.log(result);    }    fn()</script>

JavaScript中的async函数怎么使用

与生成器(Generator)相比

我们发现 async与await之间的关系 和 Generator与yield之间的关系十分类似,不熟悉Generator的朋友可以看一下我之前的文章:生成器讲解 ;一比较就发现: async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await。代码比较如下:

<script>    // Generator 函数    function * person() {        console.log('hello world');        yield '第一分隔线'             console.log('hello world 1');        yield '第二分隔线'            console.log('hello world 2');        yield '第三分隔线'    }    let iterator = person()    // console.log(iterator); 打印的就是一个迭代器对象,里面有一个 next() 方法,我们借助next方法让它运行    iterator.next()    iterator.next()    iterator.next()     // async函数    const person1 = async function (){        console.log('hello world');        await '第一分隔线'             console.log('hello world 1');        await '第二分隔线'            console.log('hello world 2');        await '第三分隔线'    }    person1()</script>

JavaScript中的async函数怎么使用

async函数的实现原理就是将 Generator 函数和自动执行器包装在一个函数里。

<script>    async function fn(args) {}    // 等同于    function fn(args) {        // spawn函数就是自动执行器        return spawn(function* () {});    }</script>

我们可以分析一下 Generator 和 async 代码的书写特点和风格:

<script>    // Generator 函数    function Generator(a, b) {        return spawn(function*() {            let r = null;            try {                for(let k of b) {                r = yield k(a);                }            } catch(e) {                            }            return r;        });    }     // async 函数    async function async(a, b) {        let r = null;        try {            for(let k of b) {            r = await k(a);            }        } catch(e) {                 }        return r;    }</script>

所以 async 函数的实现符合语义也很简洁,不用写Generator的自动执行器,改在语言底层提供,因此代码量少。

从上文代码我们可以总结以下几点

(1)Generator函数执行需要借助执行器,而async函数自带执行器,即async不需要像生成器一样需要借助 next 方法才能执行,而是会自动执行。

(2)相比于生成器函数,我们可以看到 async 函数的语义更加清晰

(3)上面就说了,async函数可以接受Promise或者其他原始类型,而生成器函数yield命令后面只能是Promise对象或者Thunk函数。

(4)async函数返回值只能是Promise对象,而生成器函数返回值是 Iterator 对象

到此,相信大家对“JavaScript中的async函数怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: JavaScript中的async函数怎么使用

本文链接: https://www.lsjlt.com/news/345237.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中的async函数怎么使用
    本篇内容主要讲解“JavaScript中的async函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的async函数怎么使用”吧!async函数async函数的返...
    99+
    2023-07-04
  • 怎么使用Async函数
    本篇内容介绍了“怎么使用Async函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Async 函数是一个...
    99+
    2024-04-02
  • Javascript中的async函数详解
    前言:async 是“异步”的简写,async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成,await 只能出现在...
    99+
    2024-04-02
  • javascript中的async怎么用
    随着 Web 应用程序越来越复杂,异步编程变得越来越重要。在 JavaScript 中,我们可以使用 async/await 关键字来管理异步操作。本文将介绍 async 的基本用法,并提供一些实例来帮助你更好地理解。什么是 async?a...
    99+
    2023-05-14
  • 深入探讨JavaScript中的async函数
    说白了:await就相当于 then 方法的第一个回调函数,只返回成功的值,失败的值需要 try...catch来捕获。async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调...
    99+
    2022-11-22
    async await javascript
  • JS的异步函数async/await怎么使用
    这篇“JS的异步函数async/await怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS的异步函数async/a...
    99+
    2023-07-05
  • Node.js中如何使用async函数
    本文小编为大家详细介绍“Node.js中如何使用async函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中如何使用async函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是 async...
    99+
    2023-07-05
  • Node中如何使用async函数
    本篇内容介绍了“Node中如何使用async函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 async 函数利用 async 函数...
    99+
    2023-07-04
  • 聊聊Node中怎么用async函数
    借助于新版 V8 引擎,Node 从 7.6 开始支持 async 函数特性。今年 10 月 31 日,Node.js 8 也开始成为新的长期支持版本,因此你完全可以放心大胆地在你的代码中使用 async 函数了。在这边文章里,我会简要地介...
    99+
    2023-05-14
    async node
  • js异步函数async/awit怎么使用
    异步函数(async/await) 是一种用于处理 JavaScript 异步操作的语法糖,它建立在 Promise 基础之上,使得...
    99+
    2023-09-29
    js
  • javascript中的replace函数怎么使用
    在JavaScript中,可以使用`replace()`函数来替换字符串中的内容。`replace()`函数接受两个参数:要替换的内...
    99+
    2023-08-18
    javascript replace
  • javascript中XmlHttp.open函数怎么使用
    在JavaScript中,`XmlHttp.open()`函数用于创建一个新的XMLHttpRequest对象,并指定要发送的请求的...
    99+
    2023-09-14
    javascript
  • JavaScript异步编程中async函数详解
    目录async函数await 表达式async使用形式async读取文件async发送AJAX请求与生成器(Generator)相比async函数 async函数的返回值为 prom...
    99+
    2022-11-13
    JavaScript async JavaScript异步编程 JS async
  • es6中Async函数有什么用
    这篇文章将为大家详细讲解有关es6中Async函数有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。async 函数async 函数,使得异步操作变得更加方便。它是 ...
    99+
    2024-04-02
  • javascript中排序的函数怎么使用
    本篇内容介绍了“javascript中排序的函数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • JavaScript中Array的filter函数怎么使用
    这篇文章主要介绍“JavaScript中Array的filter函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript中Array的filter函数怎么使用”文章能帮助大家解...
    99+
    2023-07-02
  • JavaScript中的特殊函数怎么使用
    这篇文章主要介绍“JavaScript中的特殊函数怎么使用”,在日常操作中,相信很多人在JavaScript中的特殊函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript中的特殊函数怎...
    99+
    2023-07-02
  • JavaScript中async,await的使用和方法
    JS中 async函数和await 关键字 function hellworld() { return "您好!美好世界!"; } console.log...
    99+
    2024-04-02
  • 怎么在JavaScript中使用max函数
    这篇文章给大家介绍怎么在JavaScript中使用max函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程...
    99+
    2023-06-14
  • 怎么在JavaScript中使用filter函数
    这篇文章给大家介绍怎么在JavaScript中使用filter函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScri...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作