patternjavascriptMinor
Initialising accounting groups
Viewed 0 times
groupsinitialisingaccounting
Problem
This deeply nested set of callbacks is very unreadable and I'm looking for ways to improve it:
```
seedGroups('Branch/Divisions', null, null, null, null, true, true, true, false, true, function(err, result) {
seedGroups('Capital Account', null, null, 'Balance Sheet', 'Assets', true, true, true, false, true, function(err2, result2) {
seedGroups('Current Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err3, result3) {
seedGroups('Current Liabilities', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err4, result4) {
seedGroups('Direct Expenses', null, null, 'Trading Account', 'Expenses', true, false, false, false, false, function(err5, result5) {
seedGroups('Direct Incomes', null, null, 'Trading Account', 'Incomes', true, false, false, false, false, function(err6, result6) {
seedGroups('Fixed Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err7, result7) {
seedGroups('Indirect Expenses', null, null, 'Profit & Loss A/c', 'Expenses', true, false, false, false, false, function(err8, result8) {
seedGroups('Indirect Incomes', null, null, 'Profit & Loss A/c', 'Incomes', true, false, false, false, false, function(err9, result9) {
seedGroups('Investments', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err10, result10) {
seedGroups('Loans (Liability)', null, null, 'Balance Sheet', 'Liabilities', true, true, true, false, true, function(err11, result11) {
seedGroups('Misc. Expenses (Asset)', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err12, result12) {
seedGroups('Purchase Acc
```
seedGroups('Branch/Divisions', null, null, null, null, true, true, true, false, true, function(err, result) {
seedGroups('Capital Account', null, null, 'Balance Sheet', 'Assets', true, true, true, false, true, function(err2, result2) {
seedGroups('Current Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err3, result3) {
seedGroups('Current Liabilities', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err4, result4) {
seedGroups('Direct Expenses', null, null, 'Trading Account', 'Expenses', true, false, false, false, false, function(err5, result5) {
seedGroups('Direct Incomes', null, null, 'Trading Account', 'Incomes', true, false, false, false, false, function(err6, result6) {
seedGroups('Fixed Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err7, result7) {
seedGroups('Indirect Expenses', null, null, 'Profit & Loss A/c', 'Expenses', true, false, false, false, false, function(err8, result8) {
seedGroups('Indirect Incomes', null, null, 'Profit & Loss A/c', 'Incomes', true, false, false, false, false, function(err9, result9) {
seedGroups('Investments', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err10, result10) {
seedGroups('Loans (Liability)', null, null, 'Balance Sheet', 'Liabilities', true, true, true, false, true, function(err11, result11) {
seedGroups('Misc. Expenses (Asset)', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err12, result12) {
seedGroups('Purchase Acc
Solution
Here's the thing... you're not really doing callbacks at all. You're ignoring the error values, and the result values, so you may as well have the code:
Having said that, if you want a better solution and still handle the errors properly, etc, you should consider using a Promise. You can make your
```
seedGroups('Branch/Divisions', null, null, null, null, true, true, true, false, true)
.then(() => seedGroups('Capital Account', null, null, 'Balance Sheet', 'Assets', true, true, true, false, true))
.then(() => seedGroups('Current Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false))
.then(() => seedGroups('Current Liabilities', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false))
.then(........)
.then(() => seedGroups(
seedGroups('Branch/Divisions', null, null, null, null, true, true, true, false, true, function(err, result) {});
seedGroups('Capital Account', null, null, 'Balance Sheet', 'Assets', true, true, true, false, true, function(err2, result2) {});
seedGroups('Current Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err3, result3) {});
seedGroups('Current Liabilities', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err4, result4) {});
seedGroups('Direct Expenses', null, null, 'Trading Account', 'Expenses', true, false, false, false, false, function(err5, result5) {});
seedGroups('Direct Incomes', null, null, 'Trading Account', 'Incomes', true, false, false, false, false, function(err6, result6) {});
seedGroups('Fixed Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err7, result7) {});
seedGroups('Indirect Expenses', null, null, 'Profit & Loss A/c', 'Expenses', true, false, false, false, false, function(err8, result8) {});
seedGroups('Indirect Incomes', null, null, 'Profit & Loss A/c', 'Incomes', true, false, false, false, false, function(err9, result9) {});
seedGroups('Investments', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err10, result10) {});
seedGroups('Loans (Liability)', null, null, 'Balance Sheet', 'Liabilities', true, true, true, false, true, function(err11, result11) {});
seedGroups('Misc. Expenses (Asset)', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err12, result12) {});
seedGroups('Purchase Accounts', null, null, 'Trading Account', 'Expenses', true, false, false, false, false, function(err13, result13) {});
seedGroups('Sales Accounts', null, null, 'Trading Account', 'Incomes', true, false, false, false, false, function(err14, result14) {});
seedGroups('Suspense Account', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err15, result15) {});
seedGroups('Bank Accounts', null, 'Current Assets', 'Balance Sheet', 'Assets', true, true, true, true, false, function(err16, result16) {});
seedGroups('Bank OD A/c', 'Bank OCC A/c', 'Loans (Liability)', 'Balance Sheet', 'Liabilities', true, true, true, true, false, function(err17, result17) {});
seedGroups('Cash-in-Hand', null, 'Current Assets', 'Balance Sheet', 'Assets', true, false, false, false, false, function(err18, result18) {});
seedGroups('Deposits (Asset)', null, 'Current Assets', 'Balance Sheet', 'Assets', true, true, true, false, true, function(err19, result19) {});
seedGroups('Duties & Taxes', null, 'Current Liabilities', 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err20, result20) {});
seedGroups('Loans & Advances (Asset)', null, 'Current Assets', 'Balance Sheet', 'Assets', true, true, true, false, true, function(err21, result21) {});
seedGroups('Provisions', null, 'Current Liabilities', 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err22, result22) {});
seedGroups('Reserves & Surplus', 'Retained Earnings', 'Capital Account', 'Balance Sheet', 'Assets', true, true, true, false, true, function(err23, result23) {});
seedGroups('Secured Loans', null, 'Loans (Liability)', 'Balance Sheet', 'Liabilities', true, true, true, false, true, function(err24, result24) {});
seedGroups('Stock-in-Hand', null, 'Current Assets', 'Balance Sheet', 'Assets', true, false, false, false, false, function(err25, result25) {});
seedGroups('Sundry Creditors', null, 'Current Liabilities', 'Balance Sheet', 'Liabilities', true, true, true, false, true, function(err26, result26) {});
seedGroups('Sundry Debtors', null, 'Current Assets', 'Balance Sheet', 'Assets', true, true, true, false, true, function(err27, result27) {});
seedGroups('Unsecured Loans', null, 'Loans (Liability)', 'Balance Sheet', 'Liabilities', true, true, true, false, true, function(err28, result28) {});
console.log('Groups Saved!');Having said that, if you want a better solution and still handle the errors properly, etc, you should consider using a Promise. You can make your
seedGroup function adaptable by testing whether a callback function is provided, and if it is, you call the callback, if it's not provided, you return a Promise. Your code could then look like:```
seedGroups('Branch/Divisions', null, null, null, null, true, true, true, false, true)
.then(() => seedGroups('Capital Account', null, null, 'Balance Sheet', 'Assets', true, true, true, false, true))
.then(() => seedGroups('Current Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false))
.then(() => seedGroups('Current Liabilities', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false))
.then(........)
.then(() => seedGroups(
Code Snippets
seedGroups('Branch/Divisions', null, null, null, null, true, true, true, false, true, function(err, result) {});
seedGroups('Capital Account', null, null, 'Balance Sheet', 'Assets', true, true, true, false, true, function(err2, result2) {});
seedGroups('Current Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err3, result3) {});
seedGroups('Current Liabilities', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err4, result4) {});
seedGroups('Direct Expenses', null, null, 'Trading Account', 'Expenses', true, false, false, false, false, function(err5, result5) {});
seedGroups('Direct Incomes', null, null, 'Trading Account', 'Incomes', true, false, false, false, false, function(err6, result6) {});
seedGroups('Fixed Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err7, result7) {});
seedGroups('Indirect Expenses', null, null, 'Profit & Loss A/c', 'Expenses', true, false, false, false, false, function(err8, result8) {});
seedGroups('Indirect Incomes', null, null, 'Profit & Loss A/c', 'Incomes', true, false, false, false, false, function(err9, result9) {});
seedGroups('Investments', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err10, result10) {});
seedGroups('Loans (Liability)', null, null, 'Balance Sheet', 'Liabilities', true, true, true, false, true, function(err11, result11) {});
seedGroups('Misc. Expenses (Asset)', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false, function(err12, result12) {});
seedGroups('Purchase Accounts', null, null, 'Trading Account', 'Expenses', true, false, false, false, false, function(err13, result13) {});
seedGroups('Sales Accounts', null, null, 'Trading Account', 'Incomes', true, false, false, false, false, function(err14, result14) {});
seedGroups('Suspense Account', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err15, result15) {});
seedGroups('Bank Accounts', null, 'Current Assets', 'Balance Sheet', 'Assets', true, true, true, true, false, function(err16, result16) {});
seedGroups('Bank OD A/c', 'Bank OCC A/c', 'Loans (Liability)', 'Balance Sheet', 'Liabilities', true, true, true, true, false, function(err17, result17) {});
seedGroups('Cash-in-Hand', null, 'Current Assets', 'Balance Sheet', 'Assets', true, false, false, false, false, function(err18, result18) {});
seedGroups('Deposits (Asset)', null, 'Current Assets', 'Balance Sheet', 'Assets', true, true, true, false, true, function(err19, result19) {});
seedGroups('Duties & Taxes', null, 'Current Liabilities', 'Balance Sheet', 'Liabilities', true, false, false, false, false, function(err20, result20) {});
seedGroups('Loans & Advances (Asset)', null, 'Current Assets', 'Balance Sheet', 'Assets', true, true, true, false, true, function(err21, result21) {});
seedGroups('Provisions', null, 'Current Liabilities', 'Balance Sheet', 'Liabilities', true, seedGroups('Branch/Divisions', null, null, null, null, true, true, true, false, true)
.then(() => seedGroups('Capital Account', null, null, 'Balance Sheet', 'Assets', true, true, true, false, true))
.then(() => seedGroups('Current Assets', null, null, 'Balance Sheet', 'Assets', true, false, false, false, false))
.then(() => seedGroups('Current Liabilities', null, null, 'Balance Sheet', 'Liabilities', true, false, false, false, false))
.then(........)
.then(() => seedGroups('Unsecured Loans', null, 'Loans (Liability)', 'Balance Sheet', 'Liabilities', true, true, true, false, true))
.then(() => console.log('Groups Saved!'))
.catch(err => .... some error handling ...);Context
StackExchange Code Review Q#156288, answer score: 3
Revisions (0)
No revisions yet.