Я отображаю некоторые элементы с помощью JSON
Прежде чем начать, вот порядок, который я должен иметь: toto-> titi-> tata-> trtr-> tktk-> tztz
Я должен публиковать следующую работу на каждой итерации, зная, что первая — toto
Итак, на данный момент у меня есть: тото тити тата
И я не могу посмотреть, как шлейф, чтобы увидеть все остальное.
function getall() {
ajaxGet(".../toto/api/json?pretty=true", recover);
}
getall();
function ajaxGet(url, callback) {
...
}
function recover(response){
var Json = JSON.parse(response);
var Data = Json.downstreamProjects.map(function(group) {
console.info("toto");
//toto
console.info(group.name);
//titi
ajaxGet2("..."+group.name+"/api/json?pretty=true", recover2);
});
}
function ajaxGet2(url, callback) {
....
}
function recover2(response){
var Json = JSON.parse(response);
var Data = Json.downstreamProjects.map(function(group) {
console.info(group.name);
//tata
});
}
/* JSON Downstreamproject for toto
"downstreamProjects" : [
{
"_class" : "****",
"name" : "titi",
"url" : "https://**/***/titi/",
"color" : "blue"
}
],
*/
Фактический результат: тото тити тата
Ожидаемый результат (с циклом): тото тити тата тртр тктк цц
Проще говоря, у меня есть задания, и я должен отображать правильный порядок этих заданий. Я просто знаю, что первое задание — это toto, и я могу опубликовать следующее задание. Итак, я сделал черновик и знаю, что порядок такой: toto tata trtr tktk tztz функция downstreamProjects отображает следующее задание.
Что происходит, так это то, что вы запускаете шесть асинхронных вызовов функций: toto-> titi-> tata-> trtr-> tktk-> tztz Пока эти вызовы выполняются, вы получаете три ответа ajax toto-> titi-> tata-> Затем ваш процесс заканчивается, потому что он заканчивается, когда ваши звонки выполняются с запуском вызовов ajax. Вам нужно заставить программу ждать, пока она не получит все ответы ajax. Есть несколько техник, позволяющих справиться с такими ситуациями. Использование обещаний было бы предпочтительным способом решения вашей проблемы. Я бы также рекомендовал использовать библиотеку, такую как axios, для http-запросов, которая уже обещана.
Ок, попробую что-нибудь сделать...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вам нужно зациклить вызов ajaxGet внутри функции getAll(). как показано ниже:
let group = [toto, titi, tata, trtr, tktk, tztz]
function getall() {
for(let groupName in group) {
ajaxGet(".../<groupName>/api/json?pretty=true", recover);
}
}
Спасибо за ваш ответ, я не использую массив и знаю только первый (toto)
@ KoorKoor28 Так как же получить другое имя группы? Я имею в виду, как они генерируются?
и функция downstramprojet отображает следующее задание, поэтому мне нужно сделать цикл
@ KoorKoor28, не могли бы вы поделиться кодом для downstramProject, а также примером JSON?
DownstreamProject уже находится в сценарии восстановления функции, и я добавил JSON для большего понимания, спасибо
У меня проблемы с пониманием того, что вы имеете в виду, но если вы имеете в виду, что порядок переменных, используемых для вызовов ajax, не соответствует результирующему порядку обратных вызовов ajax: выполнение ajax является асинхронным. Если вы хотите сохранить порядок, вы можете использовать обещания и связать их.