Skip to main content

Node.js, fs, promises

Node.js and fs

Node.js provides a general programming environment that utilizes JavaScript to perform logical operations. This allows a web development to be done entirely in JavaScript instead of needing extra languages to perform back-end processes and services. fs is a module in node.js that allows file system operation. This expands the functionality of JavaScript from mere browser language to something that can interact with the file system of the OS.

Promises, Promises

fs module traditionally used call-back function for its async operations. It has recently introduced Promise object alternatives for more robust programming. Promise object allows easy-to-read chaining of code to address the success or fail state of the given function, among many of its advantages.

Practical example - link(2)

We will be using link as an example. Link creates hard-links of the existing files. We will assume the following directory structure:
./
  - file1
  - file2
  - file3
Using the call-back async method, we can create a hard link file from file1 to file.callback as follows:
const fs = require('fs');
fs.link('file1','file.callback',
    (err)=>{
        if(err) console.log("ERROR OCCURED: ",err);
        console.log("File Link Success");
    }
);
In contrast, if I want to use the Promise method, the code would look like the following:
const fs = require('fs').promises;
fs.link('file2','file.promise')
.then( ()=>{console.log("File Link Success");} )
.catch((err)=>{console.log("ERROR OCCURED: ",err)
;
Code is more legible using the Promise object, and the error checking is done internally rather than relying on call-back.

Comments

Popular posts from this blog

Project: Boost-free goblins

The headache: Boost Don't take me wrongly: Boost library is a powerful set of tools for bleeding-edge technology. Much of it gets absorbed into the C++ Standard Libraries. The problem lies in our project being inactive for 7 years, which means it is relying on a library that is 7 years behind. Installing such an old library is a chore, and securing a pre-built package is problematic at best. The project is even incompatible with the later versions of Boost. It may have once given the original developers a powerful technology to propel their project in the past, but now we are stuck with clock stopped at 2011. Along with libtcod being stuck also in 2012, dealing with Boost is critical to bringing the project up-to-date. Options There are several ways to address the issue. Option 1 : Upgrade We can read each related source code, research how Boost has modified the relevant function calls, and either fix the expected return type or required input type, This may lead to mor...

Project: Boost-free Goblins, Part 2

Last time at the goblin_camp The mad developers went on a warpath to rinse away Boost from the goblins. Loud yelling and crying was involved, 52 of them. But now that all the yelling is out of the way, how should we do this? Repetition, repetition, ... I am personally a very lazy programmer. If I can make computer do the job for me, I would have the computer do the job for me. While hunting down every instance of a library manually is doable in small number, as it was for cstdint, Other Boost libraries are more widely used and require much more effort scanning the text. Text. Text. Well, if we are talking about text-manipulation in sh ... Scripting my problem away My beloved hobby tools If it is not apparently already, I love automating tasks, and UNIX shell scripting had been my go-to solution for any binary scripting needs, especially in the days before I learned to program. This problem can be solved quite easily using few lines of scripts. Caveat We will be making a s...

Debugging with GCC: GIMPLE

GCC and GIMPLE One of the very first thing GCC asks the GSoC applicants to do, even before writing the application, is to try various different debugging techniques using GCC. I was personally familiar with the basic, compile-with-g-flag-and-use-gdb method. Turns out, there's more: GIMPLE. A Simple but Non-trivial Program Problem Description The instruction asks to compile a simple but non-trivial program with some flags that generates debugging information: -O3 -S -fdump-tree-all -fdump-ipa-all -fdump-rtl-all . Because I was keep reading on ways to debug GCC just prior to the statement, I immediately thought "GCC" and tried make -j8 CXXFLAGS="-O3 -S -fdump-tree-all -fdump-ipa-all -fdump-rtl-all" . This was a mistake: turns out, GCC can't be compiled with those flags. Thankfully, GCC developers have a very active IRC channel for me to signal SOS. Resolution jakub and segher were quick to respond to my call for help. jakub: it isn't meant that y...