nodejs教程笔记(四)fs续 同步异步

本文介绍了Node.js中的同步和异步操作,包括fs模块的同步异步方法、递归解决文件查找问题、新特性如let、const及箭头函数的使用,以及异步处理的三种方式:回调函数、Promise和Async/Await。通过实例详细解析了如何在Node.js中有效地管理异步流程。
摘要由CSDN通过智能技术生成

感谢b站教程《Nodejs教程_Nodejs+Koa2入门实战视频教程-2020年更新》
参考:

  1. 同步异步:https://www.liaoxuefeng.com/wiki/1022910821149312/1023025763380448
  2. 回调函数callback:
    https://blog.csdn.net/rockage/article/details/79513450
  3. promise:https://www.liaoxuefeng.com/wiki/1022910821149312/1023024413276544

一、同步、异步

fs模块同时提供了异步和同步的方法。回顾一下什么是异步方法。因为JavaScript的单线程模型,执行IO操作时,JavaScript代码无需等待,而是传入回调函数后,继续执行后续JavaScript代码。比如jQuery提供的getJSON()操作:

$.getJSON('http://example.com/ajax', function (data) {
   
    console.log('IO结果返回后执行...');
});
console.log('不等待IO结果直接执行后续代码...');

同步的IO操作则需要等待函数返回

// 根据网络耗时,函数将执行几十毫秒~几秒不等:
var data = getJSONSync('http://example.com/ajax');

同步操作的好处是代码简单,缺点是程序将等待IO操作,在等待时间内,无法响应其它任何事件。而异步读取不用等待IO操作,但代码较麻烦。
同步方法不接收回调函数,如果同步读取文件发生错误,则需要用try…catch捕获该错误。

try {
   
    var data = fs.readFileSync('sample.txt', 'utf-8');
    console.log(data);
} catch (err) {
   
    // 出错了
}

异步读文件时,可以直接用回调函数捕捉错误。

fs.readFile('sample.png', function (err, data) {
   
    if (err) {
   
        console.log(err);
    } else {
   
        console.log(data);
        console.log(data.length + ' bytes');
    }
});

由于Node环境执行的JavaScript代码是服务器端代码,所以,绝大部分需要在服务器运行期反复执行业务逻辑的代码,必须使用异步代码,否则,同步代码在执行时期,服务器将停止响应,因为JavaScript只有一个执行线程。
服务器启动时如果需要读取配置文件,或者结束时需要写入到状态文件时,可以使用同步代码,因为这些代码只在启动和结束时执行一次,不影响服务器正常运行时的异步执行。

二、递归解决问题2

问题描述:wwwroot文件夹下面有images css js 以及index.html,找出wwwroot目录下所有目录,然后放在一个数组中

var path = './wwwroot'
var dirArr = [];

fs.readdir(path, (err, data)=>{
   
    if(err) {
   
        console.log(err);
        return;
    }
    // 递归实现
    (function getDir(i){
   
        if(i == data.length) {
    // 执行完成
            console.log(dirArr)
            return
        }

        fs.stat(path+'/'+data[i], (error, stats)=>{
   
            if(stats.isDirectory(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值