Я пытаюсь вычислить сумму результатов от внешнего API, и мне нужно сделать один запрос для каждого ключевого слова, которое у меня есть. Код выполняется успешно, но функция возвращает значение до того, как все запросы ajax будут завершены. Я пытался добавить «асинхронный» пары, но это не рекомендуется, то я сделал это:Возвращаемая переменная AJAX после завершения cicle
function calcTotal(arr) {
var t_docs = 0;
var i = 0;
var len = arr.length;
var aReq = []
for(i = 0; i < len; i++)
{
console.log(i);
var apiDataLQKT = {
keyword: arr[i],
start_date: "2015-01-01",
end_date: "2015-06-01",
format: 'jsonp',
sources_types: sources,
sources_names: names,
domains: argDomains,
words: terms,
author_id: usrID,
sentiment:sentiment,
positive_threshold:posThresh,
negative_threshold:negThresh,
language:lang,
author_location:geolocations,
author_gender:genderID,
typologies:typID,
document_type:docType,
source_base_url:'',
emotion:'',
metadata:'',
order_sort:'',
order_by:''
}
console.log(apiDataLQKT);
aReq[i] = $.ajax({
type:'GET',
url:apiUrl+'LightQuantitativeKeywordTrend',
contentType: 'application/javascript',
crossDomain: true,
dataType: 'jsonp',
data: apiDataLQKT,
success: function(json) {
var res = json.LightQuantitativeKeywordTrend;
t_docs += res.count;
console.log("T_DOCS[" + arr[i] + "]: " + t_docs);
}
});
}
aReq[arr.length-1].done(function(data){
return t_docs;
});
}
консоль журнал выход:
Total: 0
T_DOCS[undefined]: 1445
T_DOCS[undefined]: 1521
...
Что еще я могу попробовать?
Вы ищете обещания. См. ['$ .when()'] (https://api.jquery.com/jquery.when/) для примера того, как отложить потребление набора результатов вызова ajax до тех пор, пока не вернутся предыдущие вызовы в очереди. Похоже, это то, о чем вы просите. – War10ck