Javascript 从Google Fusion表返回单个值
我试图从Google Fusion表中检索单个值,但由于调用的异步性质,在检索时遇到了问题。有什么办法吗?以下是我迄今为止所尝试的:Javascript 从Google Fusion表返回单个值,javascript,google-fusion-tables,Javascript,Google Fusion Tables,我试图从Google Fusion表中检索单个值,但由于调用的异步性质,在检索时遇到了问题。有什么办法吗?以下是我迄今为止所尝试的: function getVal() { var queryText = encodeURIComponent(query); var gvizQuery = new google.visualization.Query( 'http://www.google.com/fusiontables/gvizdata?tq=' + que
function getVal() {
var queryText = encodeURIComponent(query);
var gvizQuery = new google.visualization.Query(
'http://www.google.com/fusiontables/gvizdata?tq=' + queryText);
gvizQuery.send(function (response) {
var dt = response.getDataTable()
alert(dt.getValue(0, 0)); // Works, returns a value
return dt.getValue(0, 0);
});
var value = getVal(); // Undefined
我将回答你在评论中提出的问题,因为这更清楚,我想这就是你想要解决的问题 使用Javascript来处理此类异步调用。(JS概述) 承诺将帮助您等待响应,然后在同一台计算机上执行操作 一个例子-
if (window.Promise) {
console.log('Promise found');
var promise = new Promise(function(resolve, reject) {
var request = new XMLHttpRequest();
request.open('GET', 'http://api.icndb.com/jokes/random');
request.onload = function() {
if (request.status == 200) {
resolve(request.response); // we got data here, so resolve the Promise
} else {
reject(Error(request.statusText)); // status is not 200 OK, so reject
}
};
request.onerror = function() {
reject(Error('Error fetching data.')); // error occurred, reject the Promise
};
request.send(); //send the request
});
console.log('Asynchronous request made.');
promise.then(function(data) {
console.log('Got data! Promise fulfilled.');
document.getElementsByTagName('body')[0].textContent = JSON.parse(data).value.joke;
}, function(error) {
console.log('Promise rejected.');
console.log(error.message);
});
} else {
console.log('Promise not available');
}
您的示例应该与此类似-
function getVal() {
var promise = new Promise(function(resolve, reject) {
var queryText = encodeURIComponent(query);
var gvizQuery = new google.visualization.Query(
'http://www.google.com/fusiontables/gvizdata?tq=' + queryText);
gvizQuery.send(function (response) {
var dt = response.getDataTable()
resolve(dt.getValue(0, 0));
});
reject(false);
}
}
var value = getVal();
请阅读Javascript承诺,它将对您有很大帮助。很抱歉,但我的问题是,异步性质如何影响您返回单个值?你的意思是
dt.getValue(0,0)
返回的是未定义的值吗?更清楚地说,dt.getValue(0,0)在函数(响应)部分返回一个值,但在我返回值时不是。例如var value=getVal();//返回未定义非常感谢,我一直在研究许多不同的方法,但我无法集中精力处理响应。很高兴知道这有帮助!:)快乐编码!