Javascript 如何在GoogleEmbedAPI中从函数外部提取变量

Javascript 如何在GoogleEmbedAPI中从函数外部提取变量,javascript,function,google-analytics,Javascript,Function,Google Analytics,我正在尝试从我的谷歌分析账户中提取一些查询数据,我的查询运行得很好。但我遇到了一个问题,我无法实际访问查询数据,因为它位于函数内部。我分配给它的变量日志未定义,这使我相信这是一个范围问题。但是,我一直在使用范围,定义viewSelector函数的内部和外部,但在访问该数据时没有成功 我的问题是:如何从ready函数外部访问viewSelector change函数内部的数据 <div id="embed-api-auth-container"></div> <div

我正在尝试从我的谷歌分析账户中提取一些查询数据,我的查询运行得很好。但我遇到了一个问题,我无法实际访问查询数据,因为它位于函数内部。我分配给它的变量日志未定义,这使我相信这是一个范围问题。但是,我一直在使用范围,定义viewSelector函数的内部和外部,但在访问该数据时没有成功

我的问题是:如何从ready函数外部访问viewSelector change函数内部的数据

<div id="embed-api-auth-container"></div>
<div id="view-selector-container"></div>
<script>
    (function(w,d,s,g,js,fs){
        g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(f){this.q.push(f);}};
        js=d.createElement(s);fs=d.getElementsByTagName(s)[0];
        js.src='https://apis.google.com/js/platform.js';
        fs.parentNode.insertBefore(js,fs);js.onload=function(){g.load('analytics');};
    }(window,document,'script'));

    var accounts;
    gapi.analytics.ready(function() {
        gapi.analytics.auth.authorize({
            container: 'embed-api-auth-container',
            clientid: 'CLIENT_ID'
        });
        var viewSelector = new gapi.analytics.ViewSelector({
            container: 'view-selector-container'
        });
        viewSelector.on('change', function(ids) {
// "ids" is the data I want to access
            accounts = ids;
            console.log('1: ' + accounts);
        });

        viewSelector.execute();  
    });


 // This is where I need to access the data and am unable to
    console.log('2: ' + accounts);
</script>
非常感谢

假设ready函数按预期工作,则在函数外部执行的任何代码都不会等待分析就绪。您可能需要修改代码的放置位置:

<script>
(function(w,d,s,g,js,fs){
    g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(f){this.q.push(f);}};
    js=d.createElement(s);fs=d.getElementsByTagName(s)[0];
    js.src='https://apis.google.com/js/platform.js';
    fs.parentNode.insertBefore(js,fs);js.onload=function(){g.load('analytics');};
}(window,document,'script'));

var accounts;
gapi.analytics.ready(function() {
    gapi.analytics.auth.authorize({
        container: 'embed-api-auth-container',
        clientid: 'CLIENT_ID'
    });
    var viewSelector = new gapi.analytics.ViewSelector({
        container: 'view-selector-container'
    });
    viewSelector.on('change', function(ids) {
        accounts = ids;
        console.log('1: ' + accounts);
    });

    viewSelector.execute();  

    // Accounts is ready here:
    console.log('2: ' + accounts);
});


// This is where I need to access the data and am unable to
// `gapi.analytics` not ready yet.
</script>
要引用文档,请执行以下操作:

所有其他函数都应该放在ready回调函数中,以便 确保在调用库之前加载库


谢谢,但是我做了轻微的调整,并且accounts仅在viewSelector.on函数中可用。好的,因此该变量不在change函数中,但是,它仅在调用change函数后设置。您可能需要查看JS闭包来了解这里发生了什么。