2016-04-14 4 views
0

Da geschachtelte Schalter Fälle ist nicht sehr lesbar, wie kann ich meine verschachtelten Switch-Fall zu optimieren?Optimieren verschachtelten Switch-Fall

switch (code) { 
    case 200: 
    switch (status) { 
     case 'EXISTS': 
     $alreadyExistsMessage.show(); 
     break; 
     case 'UPDATED': 
     $alreadyExistsMessage.show(); 
     break; 
     case 'ERROR': 
     $wrongFormatMessage.show(); 
     break; 
    } 
    break; 
    case 201: 
    redirectOnSuccess(data); 
    break; 
    default: 
    $wrongFormatMessage.show(); 
    break; 
} 
+0

Es ist nichts falsch mit der Art und Weise Sie es tun ... – brso05

+1

Entweder Sie tun, was Sie haben, oder Sie Funktionen aufrufen ... – epascarello

+0

Anruf eine Funktion mit dem Schalter-Fall im Inneren des Gehäuses des . –

Antwort

2

das einzige, was ich tun würde, ist Fall zu kombinieren 'UPDATED' und 'EXISTS' aufgrund der gleichen Block:

switch (code) { 
    case 200: 
    switch (status) { 
     case 'EXISTS': 
     case 'UPDATED': 
     $alreadyExistsMessage.show(); 
     break; 
     case 'ERROR': 
     $wrongFormatMessage.show(); 
     break; 
    } 
    break; 
    case 201: 
    redirectOnSuccess(data); 
    break; 
    default: 
    $wrongFormatMessage.show(); 
    break; 
} 
0

Eine Alternative wäre eine „Karte“, um Codes und Status werden zu schaffen.

In diesem Beispiel haben Sie eine callbacks Variable, die sich wie eine Karte verhält. Sie greifen dann auf die Eigenschaften unter code zu. Wenn diese Eigenschaft eine Funktion ist, führen Sie sie aus, andernfalls verwenden Sie die status, um die Eigenschaft abzurufen, die die Funktion enthält.

/* mocks */ 
 
var code = 200; 
 
var status = 'UPDATED'; 
 

 
var $alreadyExistsMessage = 
 
    $wrongFormatMessage = { 
 
    show:() => { 
 
     console.log(code, status, callback[code][status]); 
 
    } 
 
    }; 
 

 
/* code */ 
 

 
var callback = { 
 
    '200': { 
 
    'EXISTS': $alreadyExistsMessage.show, 
 
    'UPDATED': $alreadyExistsMessage.show, 
 
    'ERROR': $wrongFormatMessage.show 
 
    }, 
 
    'default': $wrongFormatMessage.show 
 
}; 
 

 
var fn = callback[`${code}`]; 
 

 

 
if (typeof fn === 'function') { 
 
    fn(); 
 
} 
 
else if (!fn) { 
 
    fn = callbacks['default']; 
 
    fn(); 
 
} 
 
else { 
 
    fn = fn[status]; 
 
    fn(); 
 
}