Return 来自 Google 融合的单个值 Table

Return Single Value From Google Fusion Table

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

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 to handle such Async calls. (An overview of JS promise).

Promise 会帮助你等待响应,然后在响应上进行操作。

一个例子-

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承诺,对您有很大帮助。