Crash course
02
PAY Namibia 2018
- Program waits until the previous call is finished
- Too slow when you wait for 3rd party responses, reading from fs
and doing some operations that require high CPU usage
const fs = require('fs')
let content
try {
content = fs.readFileSync('content.txt', 'utf-8')
} catch (ex) {
console.log(ex)
}
console.log(content)
You don't want this context.txt to be too big
- Do time-consuming task without waiting for it.
- Register appropriate jobs when task is completed
Santa's little helper - Callbacks
const fs = require('fs');
function afterReadFileDoThis(err, content) {
if (err) {
return console.log(err);
}
console.log(content);
}
fs.readFile('file.md', 'utf-8', afterReadFileDoThis);
NodeJS fs lib provides methods for reading files in both manners
Santa's little helper - Promises
function slowFunction(){
return new Promise((resolve,reject) =>{
setTimeout(()=>{
resolve("slow function done");
},10000);
});
}
slowFunction().then((response)=>{
console.log(response);
});
Promises are another way of handling async functions/operations
Santa's little helper - async/await
function slowFunction(){
return new Promise((resolve,reject) =>{
setTimeout(()=>{
resolve("slow function done");
},10000);
});
}
async function main() {
let x = await slowFunction();
console.log(x);
}
main();
Since NodeJS 7.10.0 async/await is added
- Create a async function and try to call it using all three methods
- Create async function that calls async function (nested)
NodeJS can as well be used for creating some useful scripts to automate your daily work
NodeJS provides fs module that enables easy file manipulation
//async
fs.readFile('file.md', 'utf-8', (err, content) =>{
if (err) {
return console.log(err);
}
console.log(content);
});;
let content;
try {
content = fs.readFileSync('content.txt', 'utf-8');
} catch (ex) {
console.log(ex);
}
console.log(content);
//async
fs.writeFile('message.txt', 'Hello Node.js', (err) => {
if (err) throw err;
console.log('The file has been saved!');
});
//stream
const wstream = fs.createWriteStream('where_am_i.txt');
wstream.write('We are in PAY\n');
wstream.write('Windhoek, Namibia\n');
wstream.end();
//creating dir
const dir = './pay_files';
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
Pass three files to your program and print the shortest one
Read the config file and create appropriate structure on FS.
//example of config file
rootDir(dir1(file1.txt,file2.txt),dir2(subdir(subdir_file.txt), file.txt),emptyDir())
() - if there are parentheses after the word, that represents a folder.
All content inside parentheses represents content within that folder.
It can be another folder or file.