node package manager
Orgs are free. Discover, share, and reuse code in your team. Create a free org »

slow

Keep your pants on, javascript.

don't blow the stack, or over-async a nice web service.

slow is smooth, smooth is fast.

it goes,

 npm install slow
slow=require('slow');
slow.walk( [1,2,3,4], random_wait, console.log);//results, in order
 
function random_wait(i, callback){
  setTimeout(callbck(i), Math.random()*4000);
}

unlike the other woderful async libraries, this one lets you set the pace.

so you don't immediately do everything at once.

like some fool.

you can be safe with memory and respect external services.

the methods are:

rate-limited

explicitly set a pace, but respect a maximum current request rate (defaults to 10)

(it begins at this pace, but slows it down if callbacks begin to build-up)

  • slow.pace ( arr, fn, [options], callback ) //60bpm
  • slow.walk ( arr, fn, [options], callback ) //120bpm
  • slow.jog ( arr, fn, [options], callback ) //150bpm
  • slow.run ( arr, fn, [options], callback ) //180bpm
  • slow.heartbeat ( arr, fn, [options], callback ) //72bpm

count-limited

do only a few things at a time. (only go as fast as your callback does)

  • slow.steady ( arr, fn, [options], callback ) //max=5
  • slow.handful ( arr, fn, [options], callback ) //max=3
  • slow.pocket ( arr, fn, [options], callback ) //max=7
  • slow.backpack ( arr, fn, [options], callback ) //max=15
  • slow.shovel ( arr, fn, [options], callback ) //max=35

the options are:

{
 debug: true, //understand when the requests are being fired
 verbose: true, //include the input in the results
 monitor: function(r){console.log(r.length)}, //watch the results coming in in real-time
 max: 10 //the most number of concurrent requests you're comfortable making
}

but you can just ignore those tho

in the Browzers!

(2.8k)

<script src="https://raw.github.com/spencermountain/slow/master/slow.min.js"></script>
<script>
  slow.__walk__( [1,2,3,4,5,6,7], my_function, {max:3}, function(r){
    alert(r.join(''))
  })
  function my_function(q, callback){
    var x=Math.floor(Math.random()*2000)
    setTimeout(function(){callback("finished "+q+" in "+x+"ms")}, x)
  }
</script> 

what about my craziness..

if you're in a situation that needs fancy paramaters, wrap them up like this:

slow.steady( [1,2,3,4], whatev, console.log);
function whatev(i, callback){
  my_craziness(param1, param2, then_finally, a, callback) //works fine
}

or if your function returns [errror, result] (i hate that)

slow.steady( [1,2,3,4], whatev, console.log);
function whatev(i, callback){
  my_craziness(i, function(err, result){
    callback(result||err);//la de da;)
  })
}

license

MIT