!!!编程中的同步与异步与生活中的感觉是相反的
编程同步是一件事情做完再做另一件事情,异步是同时开始做几件事情(结合下面的例子理解)

readFile()的基础用法

readFile() // 异步读取文件

可传入3个参数

第一个参数:文件的路径(不可省略)

第二个参数:编码方式(可省略,省略后读出的文件就是buffer数据格式)

第三个参数:(不可省略)
一个函数,表示读取文件之后要做的事情;
这个函数可传入两个参数,第一个代表读取失败时的错误,第二个代表读取成功时读到的数据;

const fs = require('fs');

fs.readFile('../../static/txt/a.txt', 'utf-8', (err, data) => {
    console.log(data);
});


readFileSync()的基础用法

readFileSync() // 同步读取文件

可传入两个参数

第一个参数代表文件路径(不可省略)

第二个参数代表读出文件的编码方式(可省略,省略后读出的数据是buffer数据格式)

const fs = require('fs');

let res = fs.readFileSync('../../static/txt/a.txt', 'utf-8');

console.log(res);

readFile()异步

const fs = require('fs');

fs.readFile('../../static/txt/a.txt', 'utf-8', (err, data) => {
    console.log(data);
});

fs.readFile('../../static/txt/b.txt', 'utf-8', (err, data) => {
    console.log(data);
});

fs.readFile('../../static/txt/c.txt', 'utf-8', (err, data) => {
    console.log(data);
});

由于readFile是异步读取文件,所以就相当于读取三个文件并打印的操作在同时进行,受延迟等影响,每次执行打印的顺序不固定。
如:
111111111111 (a.txt的内容)
333333333333333 (c.txt的内容)
22222222222222 (b.txt的内容)
或:
111111111111
22222222222222
333333333333333

readFileSync()同步

const fs = require('fs');

let resA = fs.readFileSync('../../static/txt/a.txt', 'utf-8');
console.log(resA);

let resB = fs.readFileSync('../../static/txt/b.txt', 'utf-8');
console.log(resB);

let resC = fs.readFileSync('../../static/txt/c.txt', 'utf-8');
console.log(resC);

由于readFileSync()是同步读取,所以按照顺序读取并打印a.txt、b.txt、c.txt,上一个文件未读取时不会读取下一个文件(做完一件事再做另一件事)。
所以无论执行多少次结果都是:
111111111111
22222222222222
333333333333333

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐