and it is very different than a typical web server programming
Here is adjusted example from excellent video training
(that also requires you to type, since samples are not provided):
Learning Node.js LiveLessons (Sneak Peek Video Training): O'Reilly - Safari Books Online:
JavaScript is single-threaded, and node.js processing is like Windows 3.1 or 95:
"collaborative multitasking".
And there is a big difference: APIs are asynchronous.
This, along with lack of a good IDE (intellisense),
comes with "cost" in productivity.
Here is a simple example of synchronous getting list of sub-directories:
function load_albums_sync(callback){
var folder='albums';
var file_list = fs.readdirSync(folder);
var dirs_only=[];
for(var i=0;i<file_list.length;i++) {
var st=fs.statSync(folder+'\\'+file_list[i]);
if(st.isDirectory())
dirs_only.push(file_list[i]);
}
callback(null,dirs_only);
}
JavaScript Async require separating requrests from responses:
function load_album_async(callback){
var folder='albums';
fs.readdir(folder,function(err,file_list){
if(err){
callback(err);
return;
}
var dirs_only=[];
(function iterator(i){
if(i>=file_list.length){
callback(null,dirs_only); // done
return;
}
fs.stat(folder+'\\'+file_list[i],function(err,stats){
if(err){
callback(err);
return;
}
if(stats.isDirectory())
dirs_only.push(file_list[i]);
iterator(i+1);
});
})(0);
});
}
Manageable, but with with nested functions and brackets, is cryptic almost as Lisp.
Observe that testing each item in the directory requires recursion,
since every item needs to be tested asynchronously:
start, and provide callback function to handle responses.
Async is not free.
Maybe Anders Hejlsberg, creator of C# and TypeScript (pre-processor for JavaScript),
can now add async-await from C# to to TypeScript,
and simplify JavaScrypt async programming also.
No comments:
Post a Comment