Node.js 从回调函数中删除重复的块

Node.js 从回调函数中删除重复的块,node.js,callback,Node.js,Callback,我正在编写一个NodeJS程序,它必须遵循以下属性 检查会话(session.user.accessToken)中是否有访问令牌可用,如果不存在,则执行console.log消息 如果访问令牌可用,请检查是否有session.attributes.isUserName,如果有,console.log(“值在那里”),如果不存在,则调用回调方法,console.log('value is there') 基本上,代码是重复的 下面是我的代码 if (!session.user.accessToke

我正在编写一个NodeJS程序,它必须遵循以下属性

  • 检查会话(
    session.user.accessToken
    )中是否有访问令牌可用,如果不存在,则执行
    console.log
    消息
  • 如果访问令牌可用,请检查是否有
    session.attributes.isUserName
    ,如果有,
    console.log(“值在那里”)
    ,如果不存在,则调用回调方法,
    console.log('value is there')
  • 基本上,代码是重复的 下面是我的代码

    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(“用户名是”+session.attributes.UserName)超出代码并单独使用?这是我提供的一个示例代码,我的应用程序中有126行代码,这些代码必须复制,一次在回调内部(
    if
    condition),另一次在回调外部(
    else
    condition)

    请让我知道如何优化这个


    谢谢

    这是我过去常做的事

    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);
    

    这是我过去常做的事

    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);