Why is async.js needed?

I thought javascript is non-blocking and asynchronous, so what does async give you?

I know you get some functions like map to fire off multiple "threads", but is that it?

I'm completely new to javascript and nodejs.

Edit: I don't mean "threads", I mean like the appearance of executing multiple callbacks in parallel.

Javascript "is" not non-blocking and asynchronous. And it is one-threaded, so instructions are executed sequentially, one after another, not in parallel.

It is just easier to do asynchronous programming in Javascript than in other languages, because it has events, callbacks, closures and anonymous functions. That allows to build complex workflows where you do execute other instructions during a normally blocking operation, and come back to the operation when you get the result (generally through a callback). But you or the library you use have to build this async workflow. Javascript won't do it for you.

async offer a lot of functions which make easier to do async programming. Just utilities to write quicker async code.