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


上一篇我们介绍了nodejs的 模块系统与npm,接下来详细介绍一下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来替代上面的写法


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使得异步代码看起来就像同步代码一样,使得代码更容易理解和维护。

总结

异步编程其实就是把任务交给Nodejs的事件队列去处理,处理完成之后再通知我们的回调函数。

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

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bdawn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值