iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Node中如何使用async函数
  • 873
分享到

Node中如何使用async函数

2023-07-04 20:07:34 873人浏览 薄情痞子
摘要

本篇内容介绍了“node中如何使用async函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 async 函数利用 async 函数

本篇内容介绍了“node中如何使用async函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是 async 函数

利用 async 函数,你可以把基于 Promise 的异步代码写得就像同步代码一样。一旦你使用 async 关键字来定义了一个函数,那你就可以在这个函数内使用 await 关键字。当一个 async 函数被调用时,它会返回一个 Promise。当这个 async 函数返回一个值时,那个 Promise 就会被实现;而如果函数中抛出一个错误,那么 Promise 就会被拒绝。

await 关键字可以被用来等待一个 Promise 被解决并返回其实现的值。如果传给 await 的值不是一个 Promise,那它会把这个值转化为一个已解决的 Promise。

const rp = require('request-promise')async function main () { const result = await rp('https://Google.com') const twenty = await 20 // 睡个1秒钟 await new Promise (resolve => {  setTimeout(resolve, 1000) }) return result}main() .then(console.log) .catch(console.error)

向 async 函数迁移

如果你的 node.js 应用已经在使用Promise,那你只需要把原先的链式调用改写为对你的这些 Promise 进行 await。

如果你的应用还在使用回调函数,那你应该以渐进的方式转向使用 async 函数。你可以在开发一些新功能的时候使用这项新技术。当你必须调用一些旧有的代码时,你可以简单地把它们包裹成为 Promise 再用新的方式调用。

要做到这一点,你可以使用内建的 util.promisify方法:

const util = require('util')const {readFile} = require('fs')const readFileAsync = util.promisify(readFile)async function main () { const result = await readFileAsync('.gitignore') return result}main() .then(console.log) .catch(console.error)

3 Async 函数的最佳实践

在 express 中使用 async 函数

express 本来就支持 Promise,所以在 express 中使用 async 函数是比较简单的:

const express = require('express')const app = express()app.get('/', async (request, response) => { // 在这里等待 Promise // 如果你只是在等待一个单独的 Promise,你其实可以直接将将它作为返回值返回,不需要使用 await 去等待。 const result = await getContent() response.send(result)})app.listen(process.env.PORT)

但正如 Keith Smith 所指出的,上面这个例子有一个严重的问题——如果 Promise 最终被拒绝,由于这里没有进行错误处理,那这个 express 路由处理器就会被挂起。

为了修正这个问题,你应该把你的异步处理器包裹在一个对错误进行处理的函数中:

const awaitHandlerFactory = (middleware) => { return async (req, res, next) => {  try {   await middleware(req, res, next)  } catch (err) {   next(err)  } }}// 然后这样使用:app.get('/', awaitHandlerFactory(async (request, response) => { const result = await getContent() response.send(result)}))

并行执行

比如说你正在编写这样一个程序,一个操作需要两个输入,其中一个来自于数据库,另一个则来自于一个外部服务:

async function main () { const user = await Users.fetch(userId) const product = await Products.fetch(productId) await makePurchase(user, product)}

在这个例子中,会发生什么呢?

你的代码会首先去获取 user,

然后获取 product,

最后再进行支付。

如你所见,由于前两步之间并没有相互依赖关系,其实你完全可以将它们并行执行。这里,你应该使用 Promise.all 方法:

async function main () { const [user, product] = await Promise.all([  Users.fetch(userId),  Products.fetch(productId) ]) await makePurchase(user, product)}

而有时候,你只需要其中最快被解决的 Promise 的返回值——这时,你可以使用 Promise.race 方法。

“Node中如何使用async函数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Node中如何使用async函数

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

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

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

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

下载Word文档
猜你喜欢
  • 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
  • Node.js中如何使用async函数
    本文小编为大家详细介绍“Node.js中如何使用async函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中如何使用async函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是 async...
    99+
    2023-07-05
  • node 中如何使用Async异步处理模块
    今天就跟大家聊聊有关node 中如何使用Async异步处理模块,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Async异步处理模块!以下是小sam的...
    99+
    2024-04-02
  • 怎么使用Async函数
    本篇内容介绍了“怎么使用Async函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Async 函数是一个...
    99+
    2024-04-02
  • JavaScript中的async函数怎么使用
    本篇内容主要讲解“JavaScript中的async函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的async函数怎么使用”吧!async函数async函数的返...
    99+
    2023-07-04
  • 如何在Node.js中使用async函数的方法详解
    目录前言什么是 async 函数向 async 函数迁移3 Async 函数的最佳实践在 express 中使用 async 函数并行执行前言 借助于新版 V8 引擎,Node.j...
    99+
    2022-12-19
    Node.js使用async函数 Node.js async
  • vue中async-await如何使用
    本篇文章为大家展示了vue中async-await如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。曾经见过为了让钩子函数的异步代码可以同步执行,而对钩子函数使...
    99+
    2024-04-02
  • ES7中Async/await如何使用
    这篇文章给大家介绍ES7中Async/await如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。...
    99+
    2024-04-02
  • JS中如何使用async与await
    小编给大家分享一下JS中如何使用async与await,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、asyncasync创建一个异步函数来定义一个代码块,在其...
    99+
    2023-06-22
  • es6中Async函数有什么用
    这篇文章将为大家详细讲解有关es6中Async函数有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。async 函数async 函数,使得异步操作变得更加方便。它是 ...
    99+
    2024-04-02
  • node中的全局函数怎么使用
    本文小编为大家详细介绍“node中的全局函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“node中的全局函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • SpringBoot如何使用@Async
    这篇文章主要为大家展示了“SpringBoot如何使用@Async”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot如何使用@Async”这篇文章吧。SpringBoot使用@A...
    99+
    2023-06-22
  • js异步函数async/awit怎么使用
    异步函数(async/await) 是一种用于处理 JavaScript 异步操作的语法糖,它建立在 Promise 基础之上,使得...
    99+
    2023-09-29
    js
  • node中如何使用es5/6
    这篇文章主要介绍了node中如何使用es5/6,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。分类所有的es6特性被分成了三个阶段/分类:sh...
    99+
    2024-04-02
  • Javascript中的async函数详解
    前言:async 是“异步”的简写,async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成,await 只能出现在...
    99+
    2024-04-02
  • JS的异步函数async/await怎么使用
    这篇“JS的异步函数async/await怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS的异步函数async/a...
    99+
    2023-07-05
  • 如何使用HTML5中script元素async、defer
    本篇内容介绍了“如何使用HTML5中script元素async、defer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,...
    99+
    2024-04-02
  • Spring中的如何使用@Async异步调用
    这篇文章主要介绍了Spring中的如何使用@Async异步调用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用@Async异步调用方法Async简介异步方法调用使用场景:处...
    99+
    2023-06-25
  • node中如何使用es6/7/8
    这篇文章主要为大家展示了“node中如何使用es6/7/8”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“node中如何使用es6/7/8”这篇文章吧。前言这几年...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作