Viết chương trình đọc các file
testX.txtởdocs.
const fs = require('fs');
//? Synchronous: readFileSyn
console.log('Begin');
var data1 = fs.readFileSync('./detail/docs/test1.txt', { encoding: 'utf-8' });
console.log('Noi dung 1: ', data1);
var data2 = fs.readFileSync('./detail/docs/test2.txt', { encoding: 'utf-8' });
console.log('Noi dung 2: ', data2);
var data3 = fs.readFileSync('./detail/docs/test3.txt', { encoding: 'utf-8' });
console.log('Noi dung 3: ', data3);
console.log('End');

//? Synchronous: readFileSyn
console.log('Begin');
var data1 = fs.readFileSync('./detail/docs/test1.txt', { encoding: 'utf-8' });
console.log('Noi dung 1: ', data1);
var data2 = fs.readFileSync('./detail/docs/test23.txt', { encoding: 'utf-8' });
console.log('Noi dung 2: ', data2);
var data3 = fs.readFileSync('./detail/docs/test3.txt', { encoding: 'utf-8' });
console.log('Noi dung 3: ', data3);
console.log('End');

Asynchronous - Bất đồng bộ là readFile để đọc như sau:console.log('Begin');
// prettier-ignore
fs.readFile(
'./detail/docs/test1.txt', { encoding: 'utf-8' }, (error, data1) => {
console.log('Noi dung 1: ', data1);
}
);
// prettier-ignore
fs.readFile(
'./detail/docs/test23.txt', { encoding: 'utf-8' }, (error, data2) => {
if(error) {
return console.log('Sai đường dẫn File test23.txt');
}
console.log('Noi dung 2: ', data2);
}
);
// prettier-ignore
fs.readFile(
'./detail/docs/test3.txt', { encoding: 'utf-8' }, (error, data3) => {
console.log('Noi dung 3: ', data3);
}
);
console.log('End');

const fs = require('fs');
//? Asynchronous: readFile
// prettier-ignore
fs.readFile('./detail/docs/test1.txt', { encoding: 'utf-8' }, (error, data1) => {
if(error) {
console.log('Sai đường dẫn File test1.txt');
} else{
console.log('Noi dung 1: ', data1);
fs.readFile('./detail/docs/test23.txt', { encoding: 'utf-8' }, (error2, data2) => {
if(error2) {
console.log('Sai đường dẫn File test23.txt');
} else{
fs.readFile('./detail/docs/test3.txt', { encoding: 'utf-8' }, (error3, data3) => {
if(error) {
console.log('Sai đường dẫn File test3.txt');
} else{
console.log('Noi dung 3: ', data3);
}
});
}
});
}
}
);
const fs = require('fs');
//? Asynchronous: readFile
// prettier-ignore
fs.readFile('./detail/docs/test1.txt', { encoding: 'utf-8' }, (error, data1) => {
console.log('Noi dung 1: ', data1);
fs.readFile('./detail/docs/test23.txt', { encoding: 'utf-8' }, (error2, data2) => {
console.log('Noi dung 2: ', data2);
fs.readFile('./detail/docs/test3.txt', { encoding: 'utf-8' }, (error3, data3) => {
console.log('Noi dung 3: ', data3);
}
);
}
);
});

function a1() {
function a2() {
function a3() {
function a4() {
function a5() {
...
}
}
}
}
}
hay
if(a1){
if(a2){
if(a3){
if(a4){
if(a5){
...
}
}
}
}
}
hoặc
for(a1...){
for(a2...){
for(a3...){
for(a4...){
for(a5...){
...
}
}
}
}
}
Các cấu trúc có dạng kim tự tháp nhọn ra dần nhiều tầng như các kiểu trên thì ta gọi đó là Callback Hell.


Promise ở bài sau.