从回调函数

时间:2017-06-05 05:51:05

标签: node.js callback

我正在编写一个必须遵循以下属性的节点js程序。

  1. 检查会话中的访问令牌是否可用(session.user.accessToken),如果不存在,则console.log显示一条消息。
  2. 如果访问令牌可用,请检查是否有session.attributes.isUserName,如果有,console.log('The values are there');,如果没有,请调用回调方法console.log('The values are there');
  3. 基本上代码是重复的。
  4. 以下是我的代码。

    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条件)。

    请告诉我如何优化此功能。

    由于

1 个答案:

答案 0 :(得分: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);