返回顶部
首页 > 资讯 > 前端开发 > 其他 >浅析JS的异步函数async/await
  • 520
分享到

浅析JS的异步函数async/await

JavaScriptECMAScript6Node.js 2023-05-14 22:05:41 520人浏览 八月长安
摘要

async/await 可能会产生误导有些文章将 async/await 与 Promise 进行比较,并声称它是 javascript 异步编程发展的下一代,这一点个人觉得有点误导,个人认为 async/await 是一种改进,一个语法糖

async/await 可能会产生误导

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

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

  • Promise.any() 原理解析及使用指南
  • Promise.all() 原理解析及使用指南
  • Promise.race() 原理解析及使用指南
  • Promise.allSettled() 原理解析及使用指南

async/await 陷阱

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

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 来捕获异常。

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的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 浅析JS的异步函数async/await

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

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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作