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

ES7 引入的 async/await 是对 JavaScript 异步编程的一种改进,它提供了使用同步样式代码异步访问资源的选项,而不会阻塞主线程。但是,要很好地使用它有点棘手。在本文中,将从不同的角度探索 async/await,并展示如何正确有效地使用它们。
async/await 好处
async/await 带来的最重要的好处就是同步编程风格,先来看一个例子。
// async/awaitconst getArticlesByAuthorWithAwait = async (authorId) => { const articles = await articleModel.fetchAll(); return articles.filter((b) => b.authorId === authorId);};// promiseconst 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 可以使代码看起来像同步的,但请记住它们仍然是异步的,必须注意避免过于顺序化。
即构数智人
即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。
36 查看详情
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) { // 错误处理 }};
总结
async/await 非常强大,但也有一些注意事项。但是如果正确使用它们,还是有助于使代码高效并且高可读。
【推荐学习:javascript高级教程】
以上就是浅析JS的异步函数async/await的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/544060.html
微信扫一扫
支付宝扫一扫