2017-06-05 42 views
0

我正在編寫一個節點js程序,它必須遵循以下屬性。從回調函數中刪除重複塊

  1. 檢查會話中是否有訪問令牌(session.user.accessToken),如果不存在,則爲console.log消息。
  2. 如果訪問令牌可用,請檢查是否存在session.attributes.isUserName,如果存在,console.log('The values are there');,如果不存在,請調用回調方法console.log('The values are there');
  3. 基本上,代碼被重複。

以下是我的代碼。

if (!session.user.accessToken) { 
     console.log('Token is not available'); 
    } else { 
     if (!session.attributes.isUserName) { 
     getUserDetailsFromToken(session, function (err) { 
      if (!err) { 
       //print the user's data. 
       console.log("UserName is " + session.attributes.userName); 
      } 
     }); 
     } else{ 
      //print the user's data. 
      console.log("UserName is " + session.attributes.userName); 
     } 

     } 
    } 

這裏session.attributes.userName我們打印相同,只是回調getUserDetailsFromToken檢查,並設置一個變量。有沒有辦法讓我的console.log("UserName is " + session.attributes.userName);無法使用並單獨使用它?這是我提供的一個示例代碼,我在應用程序中有126行代碼,這些代碼必須重複,一次在回調中(if條件),另一次在外部回調(else條件)。

請讓我知道如何優化這個。

感謝

回答

2

這是我用來做

var feedback =() => { 
    //print the user's data. 
    console.log("UserName is " + session.attributes.userName); 
} 

if (!session.user.accessToken) { 
    console.log('Token is not available'); 

} else { 
    if (!session.attributes.isUserName) { 
     getUserDetailsFromToken(session, function (err) { 
      if (!err) feedback(); 
     }); 

    } else { 
     feedback(); 
    } 
} 

而只是一個建議,一些簡單的重構上的代碼它會看起來更乾淨,更少的if-else嵌套語句:

var feedback =() => { 
    //print the user's data. 
    console.log("UserName is " + session.attributes.userName); 
} 

do { 
    if (!session.user.accessToken) { 
     console.log('Token is not available'); 
     break; 
    } 

    if (session.attributes.isUserName) { 
     feedback(); 
     break; 
    } 

    getUserDetailsFromToken(session, function (err) { 
     if (!err) feedback(); 
    }); 

} while(0);