I am confused by this async behavior.
When token is false, refreshToken() function runs but the createTokenFile() doesn't wait for it to finish. 
Shouldn't var tokenDate = new Date(token.expires); wait after callApiToken().then(function() {refreshToken();}) to finish before executing?
function createTokenFile() {
    console.log("No token-file.json file found. " .red +
            "Please complete for a new one." .red);
    return callApiToken().then(function() {
        refreshToken();
    });
}
function checkExpiredToken() {
    return new Promise(function(resolve, reject) {
        if (!token) {
            refreshToken();
        }
        var tokenDate = new Date(token.expires);
        var utc = new Date().toUTCString();
        var now  = new Date(utc);
 }
 function refreshToken() {
        try {
            var tokenFile = path.join(__dirname, 'token-file.json');
                console.log(tokenFile);
            return token = JSON.parse(fs.readFileSync(tokenFile, {encoding: 'utf-8'}));
        } catch (err) {
            if (err.code !== 'ENOENT') {
                throw err;
            } else {
                return createTokenFile();
            }
        }
    }  
UPDATED with refreshToken()
 
     
     
    