rafa
Version:
Rafa.js is a Javascript framework for building concurrent applications.
88 lines (77 loc) • 2.02 kB
JavaScript
var Rafa = require(__dirname+'/../../../dist/rafa.js');
require(__dirname+"/../bench.js")(
{
name: 'Story: Promise',
test: function(d) {
return getStory('story.json').then(function(story) {
addHtmlToPage(story.heading);
return story.chapterURLs.map(getChapter)
.reduce(function(chain, chapterPromise) {
return chain.then(function() {
return chapterPromise;
}).then(function(chapter) {
addHtmlToPage(chapter.html);
});
}, Promise.resolve());
}).then(function() {
addTextToPage("All done");
}, function(err) {
addTextToPage("Argh, broken: " + err.message);
reject();
}).then(function() {
clearSpinner();
d.resolve();
});
}
}, {
name: 'Story: Rafa',
test: function(d) {
var stream = Rafa.stream();
stream
.split(function(story) {
addHtmlToPage(story.heading);
return story.chapterURLs
})
.map(getChapter)
.each(function(chapter) { addHtmlToPage(chapter.html) })
.error(function(err) { addTextToPage("Argh, broken: " + err.message) })
.done(function() {
addTextToPage("All done");
clearSpinner();
d.resolve();
});
stream.write(getStory('story.json'), true);
}
}
);
function getStory(url) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve({
heading: 'Story Title',
chapterURLs: ['Chapter 1', 'Chapter 2']
});
});
});
}
function getChapter(url) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve({
html: '<p>This is content for ' + url + '</p>'
});
});
});
}
function addHtmlToPage(content) {
log('addHtmlToPage', content);
}
function clearSpinner() {
log('spinner');
}
function addTextToPage(text) {
log('text', text);
}
function log(a, b) {
//console.log(a, b);
}