2017-08-16 28 views
0

我正在使用GoogleAnalytics Embed API創建自定義分析儀表板。將Google Analytics值強制轉換爲變量

目前我的代碼看起來是這樣的:

我的問題是,我試圖使用變量CurrentUsers其他計算。

這裏是我的代碼

var CurrentUsers; // declared globally 

gapi.analytics.ready(function() { 
    var CurrentVisitorsData = new gapi.analytics.report.Data({ 
     query: { 
      ids: 'ga:xxxxxx', 
      metrics: 'ga:users', 
      'start-date': '7daysAgo', 
      'end-date': 'yesterday' 
     } 
    }); 

    CurrentVisitorsData.on('success', function(response) { 

     CurrentUsers = response.totalsForAllResults['ga:users']; 
     console.log (CurrentUsers); //this displays the correct number of current users 
    }); 

    CurrentVisitorsData.execute(); 

    console.log (currentUsers); // This one returns Uncaught ReferenceError: CurrentUsrs is not defined 

}); 

所以響應函數變量的作品中,但它不後。我需要使用多個變量並對它們執行操作,所以我不能在響應函數中做我需要做的事情。

任何想法如何在成功函數外訪問該值?

回答

0
  1. 您聲明currentUsers而不是CurrentUsers,所以會引發錯誤。

  2. CurrentVisitorsData.on(...)是一個異步操作。這是什麼意思?當你執行console.log(CurrentUsers); CurrentUsers是未定義的,因爲沒有值。你應該把它傳遞給函數或回調。

=

function onResponseLoad(CurrentUsers){ 
    //do something with it 
    console.log(CurrentUsers); 
} 

gapi.analytics.ready(function() { 
    var CurrentUsers; 
    var CurrentVisitorsData = new gapi.analytics.report.Data({ 
    query: { 
     ids: 'ga:xxxxxx', 
     metrics: 'ga:users', 
     'start-date': '7daysAgo', 
     'end-date': 'yesterday' 
     } 
    }); 

    CurrentVisitorsData.on('success', function(response) { 
    CurrentUsers = response.totalsForAllResults['ga:users']; 
    onResponseLoad(CurrentUsers); 
    }); 

    CurrentVisitorsData.execute(); 
}); 

,或者使用IIFE和承諾(也許代碼看起來更好):

gapi.analytics.ready(function() { 
    var CurrentUsers; 

    var CurrentVisitorsData = new gapi.analytics.report.Data({ 
     query: { 
     ids: 'ga:xxxxxx', 
     metrics: 'ga:users', 
     'start-date': '7daysAgo', 
     'end-date': 'yesterday' 
     } 
    }); 

    (function getResponse(){ 
     return new Promise(function(resolve, reject){ 
     CurrentVisitorsData.on('success', function(response) { 
      CurrentUsers = response.totalsForAllResults['ga:users']; 
      resolve(CurrentUsers); 
     }); 
     }) 
    })() 
    .then(function(CurrentUsers){ 
     console.log(CurrentUsers); 

    }); 

    CurrentVisitorsData.execute(); 
});