2017-06-05 5 views
0

以下のプロパティに従わなければならないノードjsプログラムを作成しています。それが存在しない場合は、アクセストークンは、セッション(session.user.accessToken)で利用可能な場合重複ブロックをコールバック関数から削除する

  1. チェック、console.logメッセージ。
  2. アクセストークンがある場合は、が存在する場合は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(); 
    } 
} 

そして、ちょうどの提案を行うために使用するものであるおかげで、コードにはならば、他のネストされたステートメントを、クリーナー少なくなります

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); 
関連する問題