加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、容器安全、数据加密、云日志、云数据迁移!
当前位置: 首页 > 教程 > 正文

JS的异步函数async await怎么应用

发布时间:2023-07-20 11:30:17 所属栏目:教程 来源:转载
导读:   这篇“JS的异步函数async/await怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文
  这篇“JS的异步函数async/await怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS的异步函数async/await怎么使用”文章吧。
 
  ES7 引入的 async/await 是对 JavaScript 异步编程的一种改进,它提供了使用同步样式代码异步访问资源的选项,而不会阻塞主线程。但是,要很好地使用它有点棘手。在本文中,将从不同的角度探索 async/await,并展示如何正确有效地使用它们。
 
  async/await 好处
 
  async/await 带来的最重要的好处就是同步编程风格,先来看一个例子。
 
  // 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/await 与 Promise 进行比较,并声称它是 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,异步函数有两个可能的返回值:resolve 和 reject,以用于正常情况使用 .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) {
 
          // 错误处理
 
      }
 
  };
 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章