I'm hoping some folks can take a few minutes to review some code I was working on today.
https://gist.github.com/1115202
Essentially, I'm doing a lot of work in Node.js at the moment and I'm a big fan of Promises.
Since 99% of the work that I'm doing involves performing several asynchronous actions and then parsing the results, I wanted something a little simpler and more light-weight that some of the other Promise/Deferred/Futures libraries that are out there.
My aim with this is to have a simple when().then() format without having to instantiate a new Promise inside each function.
The usage is like this:
when(
function(){ this.pass(1); },
function(){ this.pass(2); }
)
.then(function(results){
console.log( results );
});
In the Github gist I've linked to above, there are use cases near the bottom. Test case 1 uses timeouts, the 2nd test case uses several async http requests in Node.js and logs the total results at the end when all 3 have finished.
I'd love to hear any opinions good or bad, recommendations on how to make it better, etc.
1 Answer 1
I made The following edits:
- Prevent the same
when
function from callingpass
twice(therefore invalidating results) - Sends
pass
function as 1st argument to avoidvar that = this
- It stores the first pass arg only for simplicity instead of all
arguments
in results(easily switched) - Then
function
can't be called more then one - I removed the need for
When
andwhen
functions(you could leave the separate functions for clarity if you wanted) - There is now only one method
then
and propfuncs
https://gist.github.com/1115319
Usage
when(
function(pass){setTimeout(pass,3000)},
function(pass){pass('2nd');}
)
.then(function(results){
console.log(results);
})
-
\$\begingroup\$ Thanks for the tips Lime. Here's the updated gist gist.github.com/1115202/…. I adopted a few of your changes, including using instanceof to instantiate a new when() and having then() redefine itself. I also liked your method of passing pass() into each function as an argument, so I adopted that as well. I ended up more or less using the same style I started with, since its a bit easier for me to read through and understand the code when I need to go back to it, and hopefully others as well. What do you think of the updates? \$\endgroup\$Geuis– Geuis2011年07月30日 23:28:48 +00:00Commented Jul 30, 2011 at 23:28
-
1\$\begingroup\$ It doesn't have some of the security/safety checks implemented above, but otherwise it looks good to me :D \$\endgroup\$William– William2011年07月31日 04:20:53 +00:00Commented Jul 31, 2011 at 4:20
after
return value twice, or is that not a worry? I mean the scenario of that happening is highly unlikely. \$\endgroup\$after
in a buggy manner then that's a bug you should fix. \$\endgroup\$