Skip to content

Instantly share code, notes, and snippets.

@slaykovsky
Created November 16, 2014 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slaykovsky/79d26a9bbf83c74ec5c7 to your computer and use it in GitHub Desktop.
Save slaykovsky/79d26a9bbf83c74ec5c7 to your computer and use it in GitHub Desktop.
Done();
'use strict';
var util = require('util');
var randomInt = function (low, high) {
return Math.floor(Math.random() * (high - low) + low);
};
var find = function (key, object, callback) {
object.forEach(function (element) {
setImmediate(function () {
if (element.key === key) {
callback(null, true, element.val);
} else {
callback(new Error('Key not found!'), false);
}
});
});
};
var getValue = function (key, obj, callback) {
var delay = randomInt(300, 1500);
console.log('Start getVal "' + key + '", delay ' + delay + 'ms');
setTimeout(function () {
// Find key there
find(key, obj, function (err, result, val) {
if (result) {
callback(null, val);
} else {
console.error(err);
} });
}, delay);
console.log('End getVal "' + key + '", delay ' + delay + 'ms');
};
var getKey = function (map, callback) {
var keys = Object.keys(map);
keys.forEach(function (key) {
callback(null, key);
});
};
var transformAsync = function (objects, map, callback) {
var counter = 1;
console.log('Function transformAsync is started.');
console.log('-----------------------------------');
getKey(map, function (err, key) {
counter++;
if(typeof map[key] === 'object') {
getKey(map[key], function (err, nestedKey) {
getValue(map[key][nestedKey], objects, function (err, value) {
map[key][nestedKey] = value;
if (--counter === 0) callback(null, map);
});
});
} else {
getValue(map[key], objects, function (err, value) {
console.log('Key is: "%s", Value is: "%s"',key, value);
map[key] = value;
if (--counter === 0) callback(null, map);
});
}
});
console.log('--------------------------------------');
console.log('Function async is ended.');
};
transformAsync(require('./data.json'), require('./map.json'), function (err, map) {
console.log(util.inspect(map, {depth: null}));
console.log('SUCCESS!');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment