我正在努力理解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未定义为什么会这样?
答案 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
});