Last active
December 12, 2015 04:19
-
-
Save DavidBruant/4713731 to your computer and use it in GitHub Desktop.
Promise version of https://nicolas.perriault.net/code/2013/flatten-javascript-pyramids-with-async-js/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function load(fixtures, onComplete) { | |
async.parallel(fixtures.map(function(fixture) { | |
return function(cb) { | |
store(fixture, function(err, result) { | |
cb(err, result); | |
}); | |
}; | |
}), onComplete); | |
} | |
describe("moods tests", function() { | |
var moods = [ | |
"2013-02-01:n1k0:sunny" | |
, "2013-02-02:n1k0:cloudy" | |
, "2013-02-03:n1k0:stormy" | |
, "2013-02-04:n1k0:rainy" | |
// … we could add many more | |
]; | |
it ("should do something useful with moods", function(done) { | |
load(moods, function(err, storedMoods) { | |
done(err || undefined); // to make a fair comparison | |
}); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function load(fixtures) { | |
return Q.all(fixtures.map(store)); // assumes the store function returns a promise for success | |
} | |
describe("moods tests", function() { | |
var moods = [ | |
"2013-02-01:n1k0:sunny" | |
, "2013-02-02:n1k0:cloudy" | |
, "2013-02-03:n1k0:stormy" | |
, "2013-02-04:n1k0:rainy" | |
// … we could add many more | |
]; | |
// a promise-freindly test framework would expect promises to be returned | |
it ("should do something useful with moods", function() { | |
return load(moods); | |
}); | |
}); |
Maybe Mocha won't ever be promise-friendly, but it wouldn't be hard to modify it for that purpose.
OK, here's where all the war is at mochajs/mocha#329
UPDATE: the war has visibly been solved here http://chaijs.com/plugins/chai-as-promised ;)
Cool! This has definitely given me some incentive to look into promises some more. For what it's worth, I've done up how I would accomplish the snippet here https://gist.github.com/balupton/4714965 uses bal-util for flow and joe for testing. Feedback welcome.
For the records, Async.js ships with a native map
method, not sure how I missed it :x
So the code is even shorter:
describe("moods tests", function() {
var moods = [
"2013-02-01:n1k0:sunny"
, "2013-02-02:n1k0:cloudy"
, "2013-02-03:n1k0:stormy"
, "2013-02-04:n1k0:rainy"
// … we could add many more
];
it("should do something useful with moods", function(done) {
async.map(moods, store, function(err, storedMoods) {
assert.ifError(err);
// now let's test stuff with stored moods
done();
});
});
});
I could have kept the load()
function in order to make the actual test code even shorter but I wouldn't really see the point.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
A thank you to tobie for a nice improvement on the promise snippet.