Book Image

Javascript Unlocked

Book Image

Javascript Unlocked

Overview of this book

JavaScript stands bestride the world like a colossus. Having conquered web development, it now advances into new areas such as server scripting, desktop and mobile development, game scripting, and more. One of the most essential languages for any modern developer, the fully-engaged JavaScript programmer need to know the tricks, non-documented features, quirks, and best practices of this powerful, adaptive language. This all-practical guide is stuffed with code recipes and keys to help you unlock the full potential of JavaScript. Start by diving right into the core of JavaScript, with power user techniques for getting better maintainability and performance from the basic building blocks of your code. Get to grips with modular programming to bring real power to the browser, master client-side JavaScript scripting without jQuery or other frameworks, and discover the full potential of asynchronous coding. Do great things with HTML5 APIs, including building your first web component, tackle the essential requirements of writing large-scale applications, and optimize JavaScript’s performance behind the browser. Wrap up with in-depth advice and best practice for debugging and keeping your JavaScript maintainable for scaling, long-term projects. With every task demonstrated in both classic ES5 JavaScript and next generation ES6-7 versions of the language, Whether read cover-to-cover or dipped into for specific keys and recipes, JavaScript Unlocked is your essential guide for pushing JavaScript to its limits.
Table of Contents (15 chapters)
JavaScript Unlocked
Credits
About the Author
About the Reviewer
www.PacktPub.com
Preface
Index

Parallel tasks and task series with the Async.js library


Another approach to deal with asynchronous calls is a library called Async.js (https://github.com/caolan/async). When using this library, we can explicitly specify how we want the batch of tasks to be resolved—as a waterfall (chain) or in parallel.

In the first case, we can supply an array of callbacks to async.waterfall, assuming when one is completed, the next one is invoked. We can also pass the resolved value from one callback to another and receive the aggregate value or the thrown exception in a method's on-done callback:

/**
 * Concat given arguments
 * @returns {String}
 */
function concat(){
  var args = [].slice.call( arguments );
  return args.join( "," );
}


async.waterfall([
    function( cb ){
      setTimeout( function(){
        cb( null, concat( "foo" ) );
      }, 10 );
    },
    function( arg1, cb ){
      setTimeout( function(){
        cb( null, concat( arg1, "bar" ) );
      }, 0 );
    },
    function( arg1...