How to access the variable data outside of a Node.js function?

This is a function in Node.js, which reads data from Analytics:

function getDataFromGA(Dimension, Metric, StartDate, EndDate, MaxResults) {
var fs = require('fs'),
    crypto = require('crypto'),
    request = require('request'); // This is an external module 

var authHeader = {
        'alg': 'RS256',
        'typ': 'JWT'
    },
    authClaimSet = {
        'iss': '***t@developer.gserviceaccount.com', // Service account email
        'scope': 'https://www.googleapis.com/auth/analytics.readonly',
// We MUST tell them we just want to read data
        'aud': 'https://accounts.google.com/o/oauth2/token'
    },
    SIGNATURE_ALGORITHM = '**',
    SIGNATURE_ENCODE_METHOD = '**',
    GA_KEY_PATH = '**',
  //finds current directory then appends  private key to the directory
    gaKey;

function urlEscape(source) {
    return source.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, '');
}

function base64Encode(obj) {
    var encoded = new Buffer(JSON.stringify(obj), 'utf8').toString('base64');
    return urlEscape(encoded);
}

function readPrivateKey() {
    if (!gaKey) {
        gaKey = fs.readFileSync(GA_KEY_PATH, 'utf8');
    }
    return gaKey;
}

var authorize = function (callback) {

    var self = this,
        now = parseInt(Date.now() / 1000, 10), // Google wants us to use seconds
        cipher,
        signatureInput,
        signatureKey = readPrivateKey(),
        signature,
        jwt;

    // Setup time values
    authClaimSet.iat = now;
    authClaimSet.exp = now + 60; // Token valid for one minute

    // Setup JWT source
    signatureInput = base64Encode(authHeader) + '.' + base64Encode(authClaimSet);

    // Generate JWT
    cipher = crypto.createSign('RSA-SHA256');
    cipher.update(signatureInput);
    signature = cipher.sign(signatureKey, 'base64');
    jwt = signatureInput + '.' + urlEscape(signature);

    // Send request to authorize this application
    request({
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        uri: 'https://accounts.google.com/o/oauth2/token',
        body: 'grant_type=' + escape('urn:ietf:params:oauth:grant-type:jwt-bearer') +
            '&assertion=' + jwt
    }, function (error, response, body) {
        if (error) {
            console.log(error);
            callback(new Error(error));
        } else {
            var gaResult = JSON.parse(body);
            if (gaResult.error) {
                callback(new Error(gaResult.error));
            } else {
                callback(null, gaResult.access_token);
            //    console.log(gaResult);
                console.log("Authorized");

            }
        }
    });

};

var request = require('request'),
    qs = require('querystring');

authorize(function (err, token) {
    if (!err) {
        // Query the number of total visits for a month

        var requestConfig = {
            'ids': 'ga:72333024',
            'dimensions': Dimension,
            'metrics': Metric,
            // 'sort': '-ga:users',
            'start-date': StartDate,
            'end-date': EndDate,
            'max-results': MaxResults
        };

        request({
            method: 'GET',
            headers: {
                'Authorization': 'Bearer ' + token // Here is where we use the auth token
            },
            uri: 'https://www.googleapis.com/analytics/v3/data/ga?' + qs.stringify(requestConfig)
        }, function (error, resp, body) {
            console.log(body);
            var data = JSON.parse(body);
            console.log(data.totalsForAllResults);
            console.log(data.rows);
        });
    }
});
}

Here I try to access it from outside:

var gaJSON = utils.getDataFromGA("ga:country", "ga:pageviews", "2011-08-04", "2014-09-12", "50");
res.send(gaJSON);

My question is how I can access the variable data in the end of the first method? How can I call it from outside of the function?

You can assign data to a variable declared in the first function. But since the authorize method is asynchronous the variable data will still be undefined at the end of the first function. The best way to do this is handle with callbacks.

I think you wanna return something related to this variable, right? Try to put a callback parameter to the first function and then call this function passing the result.

callback(variable)

Why do you want to access if from outside. ?? Even though you want to desperately then you need to create a function pass the "data" as argument and then invoke the function .

console.log(body);
var data = JSON.parse(body);
myNewFunction(data);

Write all ur logic inside "myNewFunction" that uses data .