从谷歌融合表返回单个值

Return Single Value From Google Fusion Table

本文关键字:返回 单个值 融合 谷歌      更新时间:2023-09-26

我正在尝试从Google Fusion表中检索单个值,但由于调用的异步性质而遇到问题。 任何想法如何做到这一点? 这是我到目前为止尝试过的:

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 Promise 来处理此类异步调用。(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 Promises,它会对你有很大帮助。