Skip to content

Instantly share code, notes, and snippets.

@optilude
Last active August 29, 2015 14:00
Show Gist options
  • Save optilude/11176202 to your computer and use it in GitHub Desktop.
Save optilude/11176202 to your computer and use it in GitHub Desktop.
loadReferenceData: function() {
var self = this;
return Promise.join(
self.getSharedUsers()
.then(function(sharedUsers) {
self.sharedUsers = sharedUsers;
}),
self.getSpecialDays({order: [['date']]})
.then(function(specialDays) {
self.specialDays = specialDays;
}),
self.getRates({order: [['id']]})
.then(function(rates) {
self.rates = rates;
}),
self.getTeamMembers({order: [['surname']]})
.then(function(teamMembers) {
self.teamMembers = teamMembers;
return Promise.all(teamMembers.map(function(teamMember) {
return teamMember.loadReferenceData();
}));
}),
self.getProjects({order: [['name']]})
.then(function(projects) {
self.projects = projects;
return Promise.all(projects.map(function(project) {
return project.loadReferenceData();
}));
})
).return(self);
},
loadReferenceData: function() {
var self = this;
return new Sequelize.Utils.CustomEventEmitter(function(emitter) {
var sharedUsersPromise = promise.defer(),
specialDaysPromise = promise.defer(),
ratesPromise = promise.defer(),
teamMembersPromise = promise.defer(),
projectsPromise = promise.defer();
// Shared users
self.getSharedUsers()
.success(function(sharedUsers) {
self.sharedUsers = sharedUsers;
sharedUsersPromise.resolve();
})
.error(ratesPromise.reject);
// Special days
self.getSpecialDays({order: [['date']]})
.success(function(specialDays) {
self.specialDays = specialDays;
specialDaysPromise.resolve();
})
.error(specialDaysPromise.reject);
// Rates
self.getRates({order: [['id']]})
.success(function(rates) {
self.rates = rates;
ratesPromise.resolve();
})
.error(ratesPromise.reject);
// Team members
self.getTeamMembers({order: [['surname']]})
.success(function(teamMembers) {
var waitingFor = [];
self.teamMembers = teamMembers;
// Team member reference data
teamMembers.forEach(function(teamMember) {
var teamMemberReferenceDataPromise = promise.defer();
waitingFor.push(teamMemberReferenceDataPromise);
teamMember.loadReferenceData()
.success(teamMemberReferenceDataPromise.resolve)
.error(teamMemberReferenceDataPromise.reject);
});
promise.allOrNone(waitingFor)
.then(teamMembersPromise.resolve, teamMembersPromise.reject);
})
.error(teamMembersPromise.reject);
// Projects
self.getProjects({order: [['name']]})
.success(function(projects) {
var waitingFor = [];
self.projects = projects;
// Project reference data
projects.forEach(function(project) {
var projectReferenceDataPromise = promise.defer();
waitingFor.push(projectReferenceDataPromise);
project.loadReferenceData()
.success(projectReferenceDataPromise.resolve)
.error(projectReferenceDataPromise.reject);
});
promise.allOrNone(waitingFor)
.then(projectsPromise.resolve, projectsPromise.reject);
})
.error(teamMembersPromise.reject);
promise.allOrNone([sharedUsersPromise, specialDaysPromise, ratesPromise, teamMembersPromise, projectsPromise])
.then(
function() {
emitter.emit('success', self);
},
function(error) {
emitter.emit('error', error);
}
);
}).run();
},
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment