2016-04-14 96 views
0

由於嵌套開關盒的可讀性不是很好,我怎樣才能優化我的嵌套開關盒?優化嵌套開關盒

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

沒有什麼錯,你正在做它的方式...... – brso05

+1

無論你做什麼,你或者你調用函數... – epascarello

+0

通話中箱與開關的情況下的功能。 –

回答

2

我會做的唯一一件事就是案件'UPDATED''EXISTS'由於相同的塊結合:

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

另一種方法是創建一個「地圖」,以規範和地位。

在這個例子中,你有一個callbacks變量,就像一個地圖。您然後通過code訪問屬性。如果該屬性是一個函數,則運行該函數,否則使用status來檢索包含該函數的屬性。

/* 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(); 
 
}