nodebook
Version:
Node.js — Apprendre par l'exemple • Devenez autonome avec JavaScript, l'écosystème npm, le développement frontend, les applications web et en ligne de commande.
55 lines (43 loc) • 1.14 kB
JavaScript
;
const waterfall = require('async').waterfall;
const EventEmitter = require('events').EventEmitter;
const uppercaseAsync = (message, callback) => {
process.nextTick(() => {
callback(null, message.toLocaleUpperCase ? message.toLocaleUpperCase() : message);
});
}
const splitWordsAsync = (message, callback) => {
process.nextTick(() => {
if (typeof message !== 'string'){
return callback(new TypeError('message is not a String'));
}
return callback(null, message.split(' '));
});
}
const abbreviateAsync = (words, callback) => {
process.nextTick(() => {
try {
const abbr = words.reduce((abbr, word) => abbr + word[0], '');
return callback(null, abbr);
}
catch (err){
return callback(err);
}
});
}
const messageAbbr = (message) => {
const emitter = new EventEmitter();
waterfall([
(done) => done(null, message),
uppercaseAsync,
splitWordsAsync,
abbreviateAsync
], (err, abbr) => {
if (err) {
return emitter.emit('error', err);
}
emitter.emit('data', abbr);
});
return emitter;
};
module.exports = messageAbbr;