30天精通Nodejs--第三天:异步编程

news/2024/7/19 14:09:45 标签: nodejs, js, 入门, 精通, 异步, 后端, 1024程序员节

上一篇我们介绍了js>nodejs的模块系统与npm,接下来详细介绍一下js>nodejs异步编程。

异步编程理念

Node.js的一个核心特性是其异步编程模型。与传统的同步阻塞I/O不同,Node.js采用了事件驱动、非阻塞的方式来处理I/O操作。这意味着Node.js可以同时处理多个操作,而不会因等待某一个操作完成而被阻塞。

事件循环机制

为了理解异步编程,先来来了解一下Node.js的事件循环机制。

Node.js将任务分成两类:同步任务和异步任务。同步任务会立即执行,而异步任务会被放入事件队列中,等待事件循环来处理。

回调函数的工作原理

异步编程中,我们经常会使用回调函数。回调函数是一个被传递给异步函数的函数,当异步操作完成时,这个函数将会被调用。


fs.readFile('file.txt', 'utf8', function(e, data) {
  if (e) throw e;
  console.log(data);
});

在这个例子中,readFile是一个异步函数,它会在文件读取完成后调用传递给它的回调函数。

Promise与Async/Await

为了更方便地处理异步操作,ES6引入了Promise和后来的Async/Await。它们提供了一种更优雅的方式来编写异步代码。
Promise是一个代表异步操作最终完成或失败的对象。

// 异步读取文件的函数
function readFileAsync(path) {
  return new Promise((resolve, reject) => {
    fs.readFile(path, 'utf8', (err, data) => {
      if (err) reject(err);
      else resolve(data);
    });
  });
}

readFileAsync('file.txt').then(data => {
    console.log(data );
}).catch((e) => {
    console.error(e)
})

或者也可以使用Async/Await来替代上面的写法

js">
const fs = require('fs')
function readFileAsync(path) {
    return new Promise((resolve, reject) => {
        fs.readFile(path, 'utf8', (err, data) => {
            if (err) reject(err);
            else resolve(data);
        });
    });
}

async function main() {
    try {
        const data = await readFileAsync('file.txt');
        console.log(data);
    } catch (error) {
        console.error(error);
    }
}

main();

Async/Await使得异步代码看起来就像同步代码一样,使得代码更容易理解和维护。

在接下来的文章中,我们将继续深入探讨Node.js的各个方面。
大家有任何问题都可以在评论区留言交流,相互学习!


http://www.niftyadmin.cn/n/5117898.html

相关文章

DAPP:区块链技术的创新应用,引领未来趋势

DAPP是去中心化应用,是区块链技术中的一种新型应用形态。与传统的中心化应用不同,DAPP无需中央服务器进行数据处理和存储,而是通过分布在全球各地的节点进行协同工作,实现了数据和权力的去中心化。DAPP的诞生,正是区块…

【java学习—八】关键字static(4)

文章目录 1. 前言2. 关键字static3. 代码理解3.1. 类变量3.2. 类方法3.3. 工具类3.4. 总结 4. 注意事项 1. 前言 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过 new 关键字才会产生出对象&#xf…

Linux ——目录结构

这些目录在 Linux 系统中的解释如下: 目录用途/bin存放常用命令的二进制文件。/boot包含启动 Linux 时必要的核心文件。/dev代表设备(Device),其中包含系统的外部设备。/etc主要存放系统的配置文件。/home用户的主目录&#xff0…

9.在canvas绘制图片和视频

drawImage 该方法主要用于在画布上绘制图片 参数1 绘制到上下文的元素。允许任何的画布图像源,例如:HTMLImageElement、SVGImageElement (en-US)、HTMLVideoElement、HTMLCanvasElement、ImageBitmap、OffscreenCanvas 或 VideoFrame (en-US)。 参数2…

攻防世界-Ph0en1x-100

第一次独立使用frida解安卓题,没分析代码 Steps 使用jadx打开apk分析主要代码 最主要的就是这个if判断了,安装apk后,有一个输入框和一个check按钮,会根据输入的结果Toast:Success or Failed。 getSecret(getFlag()).eq…

2023北航全球科创大赛启动,首次设立面向在校生群体的新芽赛道

10月21日,2023北航全球科创大赛在京启动,北京市人大常委会副主任兼秘书长于军、住房和城乡建设部住房公积金监管司司长杨佳燕、共青团中央青年发展部副部长阚宝奎、海淀区委常委副区长林剑华、中国科协“科创中国”青年百人会助理秘书长杜新峰&#xff0…

x86与x64简述

参考: https://www.php.cn/faq/556228.html https://baijiahao.baidu.com/s?id1780254509175249371&wfrspider&forpc https://www.runoob.com/linux/linux-comm-uname.html 1. x86和x64 1.1 x86和x64简述 x86和x64都属于处理器平台的系统架构术语。值得…

公司新品上市,如何做好新品发布会宣传

公司新品上市不仅展现了公司的生命力与活力,还代表了公司与时俱进的创新力,积极听取用户反馈的服务精神,而公司新品上市时都会举办新品发布会,今天媒介盒子就来和大家分享,公司如何做好新品发布会的宣传。 一、 撰写活…