全局变量未定义

时间:2014-04-02 14:59:45

标签: javascript variables undefined

我正在努力理解javascript中的范围

我正在调用google drive api,我想访问该函数外的变量。

我的代码;

var newDate;
getLiveDate(lastFileId);
console.log(newDate);

function getLiveDate(fileId) {
    var request = gapi.client.request({
        'path': 'drive/v2/files/' + fileId,
        'method': 'GET',
        'params': {
            'fileId': fileId
        }
    });

    request.execute(function(resp) {
        newDate = resp.modifiedDate;
    });
}

在控制台中,newDate未定义为什么会这样?

3 个答案:

答案 0 :(得分:1)

API调用是异步的。您的console.log()在从API收到回复之前执行。

传递给execute()的函数是回调函数,因此您应该将依赖于API响应的逻辑移动到那里。

request.execute(function(resp) {
    newDate = resp.modifiedDate;

    // this is the callback, do your logic that processes the response here
});

答案 1 :(得分:1)

因为request.execute是一个异步函数。甚至在

之前
newDate = resp.modifiedDate;

已执行,

console.log(newDate);

已执行。所以,你最好的选择是在回调函数中打印它,就像这样

request.execute(function(resp) {
    newDate = resp.modifiedDate;
    console.log(newDate);
});

答案 2 :(得分:1)

对Google API的请求是异步调用 - 因此下一段代码会在该函数仍在处理时执行。执行此操作的正确方法是使用回调而不是全局变量:

function getLiveDate(fileId, callback) {
    ...
    request.execute(function(resp) {
        callback(resp);
    });
}

并称之为

getLiveDate(lastFileId, function(resp) {
    console.log(resp); //your data
});