Я пытался получить оставшуюся часть своего кода, чтобы дождаться запуска вызова ajax перед выполнением, поскольку сначала мне нужна информация в массиве. Я попробовал несколько подходов, но я не могу понять, почему они этого не сделают. Похоже, что использование обещаний может быть лучшей практикой в такой ситуации. В настоящее время ajax по-прежнему работает после .done и final console.log (3).Использование обещаний для получения данных ajax
Пожалуйста, смотрите код ниже:
$(document).ready(function(){
var selectedChannels = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
var numberOfChannels = selectedChannels.length;
var onlineChannels = [];
var offlineChannels = [];
function getChannels(){
for (var count = 0 ; count < numberOfChannels; count++) {
$.ajax({
url: "https://wind-bow.hyperdev.space/twitch-api/streams/"+ selectedChannels[count],
type: "get",
dataType: "jsonp",
callback: "?",
data: {
},
success: function(data) {
if (data.stream) {
var logo = data.stream.channel.logo
var twitchName = data.stream.channel.display_name
var details = data.stream.channel.status
var link = data.stream.channel.url
onlineChannels.push(twitchName);
console.log(onlineChannels);
console.log(1);
$(".display-area").append("<div class=\"result-box online\"><img src="+ logo +" alt=\"twitchName\" class=\"profile-img\"></img><div class=\"title\">"+ twitchName +"</div><div class=\"description\">"+ details +"</div>");
}
},
}).done(function(){
});
}
}
/* should run after ajax and onlineChannels array has been populated */
function completeAjax() {
var promised = getChannels();
var promisedComplete = $.when(promised);
promisedComplete.done(function(){
console.log(onlineChannels);
console.log(2);
});
}
completeAjax();
console.log(3)
});
Вы здесь несколько неясны, метод 'done()' уже ожидает завершения вызова ajax? У вас есть ajax звонки в цикле, хотя, действительно ли вы действительно хотите, чтобы вы ожидали ** всех из них **, чтобы закончить? – adeneo
Привет, да, извините, мне нужно, чтобы все петли цикла ajax для цикла завершились, прежде чем перейти к коду в функции completeAjax(). – jaemsnrg
Теперь ясно, что вы после. Если вы хотите выполнить функцию completeAjax после завершения ajax-вызова, поместите его в полный раздел. Если вы выполняете цикл и выполняете несколько вызовов ajax, вам необходимо использовать функцию jQuery .done. (положите функцию fullAjax funtion в функцию jQuery done. –