node jquery ajax不执行_node中fs.readfilesync/fs.writeFileSync的区别

Node.js内置的fs模块就是文件系统模块,负责读写文件。

和所有其它JavaScript模块不同的是,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操作,但代码较麻烦。


首先,我们思考一个典型的异步编程模型,考虑这样一个题目:读取一个文件,在控制台输出这个文件内容。

var fs = require('fs');
fs.readFile('sample.txt', 'utf8', function (err, data) {
    console.log(data);
});

看起来很简单,再进一步: 读取两个文件,在控制台输出这两个文件内容。

var fs = require('fs');
fs.readFile('sample01.txt', 'utf8', function (err, data) {
    console.log(data);
    fs.readFile('sample02.txt', 'utf8', function (err,data) {
        console.log(data);
    });
});

要是读取更多的文件呢?

var fs = require('fs');
fs.readFile('sample01.txt', 'utf8', function (err, data) {
    fs.readFile('sample02.txt', 'utf8', function (err,data) {
        fs.readFile('sample03.txt', 'utf8', function (err, data) {
            fs.readFile('sample04.txt', 'utf8', function (err, data) {

            });
        });
    });
});

这段代码就是臭名昭著的邪恶金字塔(Pyramid of Doom),另一个名字:回调地狱

可以使用async来改善这段代码,但是在本课中我们要用promise/defer来改善它。

使用 promise 替代回调函数​wiki.jikexueyuan.com fs.readFile和fs.readFileSync的区别_祥哥的说-CSDN博客_fs.readfile​blog.csdn.net
f4d1fe48cd7de7b066e18926af96743a.png
fs | Node.js API 文档​nodejs.cn Node.js | fs.readFileSync() Method - GeeksforGeeks​www.geeksforgeeks.org
64f16707ac2e2caef4f016f4bd8a79dd.png
https://www.google.com/search?sxsrf=ALeKk01NZycTfUBiQ_k2wGNEYaAh9ceC7w:1597850393162&q=fs.readfilesync%E8%BF%94%E5%9B%9E%E5%80%BC&sa=X&ved=2ahUKEwj8l9rIyKfrAhUKNOwKHeK5ChIQ1QIoAHoECA0QAQ​www.google.com 获取fs的readfille读取文件时的返回值_qq_36414265的博客-CSDN博客_irxon蓝牙console说明书​blog.csdn.net NodeJS的fs模块(一)​www.jianshu.com
12c95e0e772e1b01dccee7acf554fb11.png

版权声明:本文为weixin_39922642原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。