在下面的虚拟代码中,通常来自Google的API示例,有三个函数 - 两个由API“必需”和一个RunMe()启动它。如果电子表格请求无效,我可以访问它从handleQueryResponse()函数返回的错误消息。但就我的目的而言,我需要能够在runMe()函数中测试response.isError()的存在。这看起来很简单,但我似乎无法从handleQueryResponse()之外获得该响应对象。这可能是由于我的JavaScript新手状态或因为API做了一些奇怪的事情。
我发现取消注释console.log(查询)也很奇怪;在getTableMeta()函数中生成一个“Er”对象,它似乎只是一个原型,而不是实际查询的表示。
感谢您的建议。
下面的电子表格ID无效,最后带有“z”,有效时会将其删除。
function runMe() {
var foo = getTableMeta('0AtP_YtDJ532RdDcxZUl6Zkl4YkxKcEYzbld4ZDA4SlEz');
// console.log(response);
// console.log(response.getMessage());
// console.log(foo.getMessage());
}
// Get table metadata from Google
function getTableMeta(spreadsheet_id) {
var query = new google.visualization.Query('https://spreadsheets.google.com/a/google.com/tq?key=' + spreadsheet_id);
// console.log(query);
query.send(handleQueryResponse);
}
function handleQueryResponse(response) {
if (response.isError()) {
// alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage() + '. Please click Previous and enter a different spreadsheet ID.');
console.log(response.getMessage());
}
return response;
}
runMe();
答案 0 :(得分:1)
不幸的是,您将无法获得runMe()
函数中的值。这是因为它触发的调用是异步的;它只是发送一个请求,其响应将由指定的回调函数处理,在您的情况handleQueryResponse
中。
我会将runMe视为触发器;无论你希望在该函数中包含什么逻辑,而是专注于将其用于handleQueryResponse
。
希望有所帮助。如果我误解了某些内容,请随意提供更多背景信息。