首页 > web前端 > js教程 > 浅析JS的异步函数async/await

浅析JS的异步函数async/await

青灯夜游
发布: 2023-01-28 19:17:19
转载
2569 人浏览过

本篇文章带大家了解一下JavaScript的异步函数 async/await,希望对大家有所帮助!

浅析JS的异步函数async/await

ES7 引入的 async/await 是对 JavaScript 异步编程的一种改进,它提供了使用同步样式代码异步访问资源的选项,而不会阻塞主线程。但是,要很好地使用它有点棘手。在本文中,将从不同的角度探索 async/await,并展示如何正确有效地使用它们。

async/await 好处

async/await 带来的最重要的好处就是同步编程风格,先来看一个例子。

1

2

3

4

5

6

7

8

9

10

11

12

// async/await

const getArticlesByAuthorWithAwait = async (authorId) => {

    const articles = await articleModel.fetchAll();

    return articles.filter((b) => b.authorId === authorId);

};

 

// promise

const getArticlesByAuthorWithPromise = (authorId) => {

    return articleModel

        .fetchAll()

        .then((articles) => articles.filter((b) => b.authorId === authorId));

};

登录后复制

很明显,async/await 版本比 promise 版本更容易理解。如果忽略 await 关键字,代码看起来就像任何其他同步语言,如 Python

同时 async/await 有原生浏览器支持,截至目前,所有主流浏览器都已全面支持异步功能。

需要注意的是 async/await 在使用的过程中需要成对出现,如在函数里面要使用 await ,就必须将函数定义为 async

async/await 可能会产生误导

有些文章将 async/awaitPromise 进行比较,并声称它是 JavaScript 异步编程发展的下一代,这一点个人觉得有点误导,个人认为 async/await 是一种改进,一个语法糖,不会彻底改变编程风格。

本质上,异步函数仍然是 promises,在正确使用异步函数之前,必须了解 promises

async/await 陷阱

尽管 await 可以使代码看起来像同步的,但请记住它们仍然是异步的,必须注意避免过于顺序化。

1

2

3

4

5

6

7

8

const getArticlesAndAuthor = async (authorId) => {

    const articles = await articleModel.fetchAll();

    const author = await authorModel.fetch(authorId);

    return {

        author,

        articles: articles.filter((article) => article.authorId === authorId),

    };

};

登录后复制

这段代码在逻辑上看起来是正确的,然而这是回产生误解。

  • await articleModel.fetchAll() 将等到 fetchAll() 返回。

  • 然后 await authorModel.fetch(authorId) 将会被立即调用。

错误处理

使用 promise,异步函数有两个可能的返回值:resolvereject,以用于正常情况使用 .then() 和异常情况使用.catch()。然而,async/await 错误处理就不太好,需要使用 try...catch 来捕获异常。

1

2

3

4

5

6

7

8

const getArticlesByAuthorWithAwait = async (authorId) => {

    try {

        const articles = await articleModel.fetchAll();

        return articles.filter((b) => b.authorId === authorId);

    } catch (error) {

        // 错误处理

    }

};

登录后复制

总结

async/await 非常强大,但也有一些注意事项。但是如果正确使用它们,还是有助于使代码高效并且高可读。

【推荐学习:javascript高级教程

以上是浅析JS的异步函数async/await的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
怎么实现 JavaScript点与圆的位置关系
来自于 1970-01-01 08:00:00
0
0
0
JavaScript钩子函数是什么?
来自于 1970-01-01 08:00:00
0
0
0
c++ 调用javascript
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板