JSFiddle - React, Tailwind, and code Playground
JavaScript
function getUserDashboardData(db, userId, callback) {
// using async.auto
async.auto({
db: async.apply(bindData, db),
userId: async.apply(bindData, userId),
user: ['db', 'userId', getUserFromDatabase],
friends: ['user', getUserFriends],
discussions: ['user', getUserDiscussions],
friendRecommendations: ['user',
'friends',
getUserFriendRecommendations],
interestingDiscussions: ['discussions',
getUserInterestingDiscussions]
},
_.partialRight(processResults, callback)
);
}
function bindData(data, callback) {
callback(null, data);
}
function getUserFromDatabase(callback, data) {
data.db.read('users', 'id = ?', data.userId, callback);
}
function getUserFriends(callback, data) {
data.db.read('friends', 'user_id = ?', data.user.id, callback);
}
function getUserDiscussions(callback, data) {
data.db.read('discussions', 'user_id = ?', data.user.id, callback);
}
function getUserFriendRecommendations(callback, data) {
var friendIds = _.pluck(data.friends, 'id');
var userId = data.user.id;
data.db.read('friend_recommendations', 'user_id = ? and friend_id in ?',
userId,
friendIds,
callback);
}
function getUserInterestingDiscussions(callback, data) {
var discussionIds = _.pluck(data.discussions, 'id');
data.db.read('interesting_discussions', 'id in ?',
discussionIds,
callback);
}
function processResults(err, results, callback) {
if (err) return callback(err, undefined);
var data = {
user: results.user,
friends: results.friends,
discussions: results.discussions,
friendRecommendations: results.friendRecommendations,
interestingDiscussions: results.interestingDiscussions
};
callback(null, data);
}