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.Promise
sẽ làm phẳng đoạn lệnh này.let square = (a, b, c, cb) => {
add(a, b, (err1, res1) => {
if (err1) return cb(err1);
multiply(res1, c, (err2, res2) => {
if (err2) return cb(err2);
divide(res2, 2, (err3, res3) => {
if (err3) return cb(err3);
return cb(undefined, res3);
});
});
});
};
let add = (a, b, callBack) => {
setTimeout(() => {
if ((typeof a != 'number') | (typeof b != 'number')) {
return callBack(new Error('Tham so phai có kieu number.'));
}
return callBack(undefined, a + b);
}, 1000);
};
add(2, `3`, (err, res) => {
if (err) {
return console.log('Loi: ' + err);
}
console.log('Ket qua: ' + res);
});
// var square = (a, b, h) => ((a + b) * h) / 2;
// console.log('Dien tich: ', square(2, 3, 2));
// Phép Cộng
let add = (a, b, callBack) => {
setTimeout(() => {
if ((typeof a != 'number') | (typeof b != 'number')) {
return callBack(new Error('Tham so phai có kieu number.'));
}
return callBack(undefined, a + b);
}, 1000);
};
// Phép Nhân
let multiply = (a, b, callBack) => {
setTimeout(() => {
if ((typeof a != 'number') | (typeof b != 'number')) {
return callBack(new Error('Tham so phai có kieu number.'));
}
return callBack(undefined, a * b);
}, 1000);
};
// Phép Chia
let divide = (a, b, callBack) => {
setTimeout(() => {
if ((typeof a != 'number') | (typeof b != 'number')) {
return callBack(new Error('Tham so phai có kieu number.'));
}
if (b == 0) {
return callBack(new Error('So bi chia phai khac 0.'));
}
return callBack(undefined, a / b);
}, 1000);
};
// Tính Diện tích hình thang
let square = (a, b, c, cb) => {
add(a, b, (err1, res1) => {
if (err1) return cb(err1);
multiply(res1, c, (err2, res2) => {
if (err2) return cb(err2);
divide(res2, 2, (err3, res3) => {
if (err3) return cb(err3);
return cb(undefined, res3);
});
});
});
};
// Diện tích hình thang
square(2, 3, 3, (err, res) => {
if (err) {
return console.log('Loi: ' + err);
}
console.log('Dien tich: ' + res);
});
// Phép Cộng
let add = (a, b, callBack) => {
setTimeout(() => {
if ((typeof a != 'number') | (typeof b != 'number')) {
return callBack(new Error('Tham so phai có kieu number.'));
}
return callBack(undefined, a + b);
}, 1000);
};
// Phép Nhân
let multiply = (a, b, callBack) => {
setTimeout(() => {
if ((typeof a != 'number') | (typeof b != 'number')) {
return callBack(new Error('Tham so phai có kieu number.'));
}
return callBack(undefined, a * b);
}, 1000);
};
// Phép Chia
let divide = (a, b, callBack) => {
setTimeout(() => {
if ((typeof a != 'number') | (typeof b != 'number')) {
return callBack(new Error('Tham so phai có kieu number.'));
}
if (b == 0) {
return callBack(new Error('So bi chia phai khac 0.'));
}
return callBack(undefined, a / b);
}, 1000);
};
// Tính Diện tích hình thang
let square = (a, b, c, cb) => {
add(a, b, (err1, res1) => {
if (err1) return cb(err1);
multiply(res1, c, (err2, res2) => {
if (err2) return cb(err2);
divide(res2, 2, (err3, res3) => {
if (err3) return cb(err3);
return cb(undefined, res3);
});
});
});
};
// Diện tích hình thang
square(2, 3, `2`, (err, res) => {
if (err) {
return console.log(err + '');
}
console.log('Dien tich: ' + res);
});