Я отвечу на вопрос, который вы просили в комментариях, как это более ясно, и я предполагаю, что это проблема, которую вы хотите решить.
Используйте Javascript Promise для обработки таких вызовов Async. (Обзор JS 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');
}
Ваш пример должен выглядит что-то похожее на this-
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)' возвращает undefined? – bozzmob
Чтобы быть более ясным, dt.getValue (0, 0) возвращает значение с секцией функции (ответа), но не при возврате значения. Например, значение var = getVal(); // Возвращает undefined – eniacAvenger