Q:

Promises nodejs readability improvements

I have writting a few functions which returns a promise, to get data from google analytics api. I think what I've written is called a callback hell.. 
Can someone help me optimise this code (or give tips/best practices), so it's better readable.
var express = require('express');
var router = express.Router();
var googleAuth = require('google-oauth-jwt');
var google = require('googleapis');
var app = express();

module.exports.getGoogleData = function (jwtClient,analytics,VIEW_ID){
  return new Promise(function(resolve, reject){
    return getOrdersToday(jwtClient,analytics,VIEW_ID).then(function (orders) {
      return getOnlineUsersToday(jwtClient,analytics,VIEW_ID).then(function (users) {
        return getSearchedToday(jwtClient, analytics, VIEW_ID).then(function (searched){
          return getPageviewsTodayAndUsersToday(jwtClient, analytics, VIEW_ID).then(function (pageviews){
            var returndata =[
              {
                "Orders":orders,
                "Onlineusers":users,
                "searched":searched,
                "pageviews":pageviews[0].pageviews,
                "usersToday":pageviews[0].users
              }
            ]
            resolve(returndata);
          });
        });
      });
    });
  });
}

Example getfunction
function getOrdersToday(jwtClient,analytics,view_id){
  return new Promise(function(resolve,reject){
    analytics.data.ga.get({
        'auth':jwtClient,
        'ids': view_id,
        'metrics': 'ga:totalEvents',
        'start-date': 'today',
        'end-date': 'today',
        filters: 'ga:eventAction==Bestelling geplaatst',
        'max-results': '1'
    }, function(err, response) {
          // handle the errors (if any)
          if(err){
            console.log(err)
            reject(err)
          } else
            console.log('Response:',response)
            resolve(response.totalsForAllResults["ga:totalEvents"]);
        });
    });
}

A:

There's no need for the new Promise in there at all, and in fact by using it, you leave it open to never settling if an error occurs in one of your calls. Remember that then returns a new promise. So you can just chain all those together if you want them run sequentially:
module.exports.getGoogleData = function (jwtClient,analytics,VIEW_ID){
  var result = {};
  return getOrdersToday(jwtClient,analytics,VIEW_ID)
    .then(function (orders) {
        result.Orders = orders;
        return getOnlineUsersToday(jwtClient,analytics,VIEW_ID);
    })
    .then(function (users) {
      result.Onlineusers = users;
      return getSearchedToday(jwtClient, analytics, VIEW_ID);
    }).then(function (searched){
      result.searched = searched;
      return getPageviewsTodayAndUsersToday(jwtClient, analytics, VIEW_ID);
    }).then(function (pageviews){
      result.pageviews = pageviews[0].pageviews;
      result.usersToday = pageviews[0].users;
      return [result]; // (Seems a bit odd that it's wrapped in an array, but
                       // that's what the original code did...)
    });
}

But, those operations look independent of one another. If that's really true, run them in parallel with Promise.all:
module.exports.getGoogleData = function (jwtClient,analytics,VIEW_ID){
  return Promise.all([
    getOrdersToday(jwtClient,analytics,VIEW_ID),
    getOnlineUsersToday(jwtClient,analytics,VIEW_ID),
    getSearchedToday(jwtClient, analytics, VIEW_ID),
    getPageviewsTodayAndUsersToday(jwtClient, analytics, VIEW_ID)
  ]).then(results => {
    return [{
      Orders: results[0],
      Onlineusers: results[1],
      searched: results[2],
      pageviews: results[3][0].pageviews,
      usersToday: results[3][0].users
    }];
  });
}

