Я пытаюсь реализовать интерфейс для API веб-приложения.
Необходимо сделать три Ajax-Call.
- Список всех групп.
- Для каждой группы перечислить ее участников.
- От каждого члена группы получите
terminals
и увеличьте значение.
Три вызова Ajax выглядят так:
function getGroups () {
return jQuery.ajax({
url: "https://webapp.mydomain.com/group?session=" + his.getSessionToken() + "&customer=test"
});
}
function getMembers (group) {
return jQuery.ajax({
url: "https://webapp.mydomain.com/group/" + group.id + "/member?session=" + his.getSessionToken() + "&customer=test"
});
}
function getTerminal (terminal) {
return jQuery.ajax({
url: "https://webapp.mydomain.com/terminal/" + terminal.tid + "?session=" + his.getSessionToken() + "&customer=test"
});
}
У меня также есть следующие разные функции:
function display (html) {
document.getElementById('result').innerHTML = html;
}
function success (message) {
display('Success: ' + JSON.stringify(message, null, 2));
}
function error (error) {
display('Error: ' + JSON.stringify(error, null, 2));
}
Теперь я сталкиваюсь с проблемой, как правильно связать соответствующие Обещания (на самом деле Deferred
с).
Я попробовал следующее:
function setTerminal (terminals, index) {
function curry (terminal) {
terminals[i] = terminal;
}
return curry;
}
function expandMembers (members) {
var promises = [];
var promise;
var terminals = members.terminal || [];
for (var i = 0; i < terminals.length; i++) {
promise = getTerminal(terminals[i]);
promise.then(setTerminal(terminals, i));
promises.push(promise);
}
return Promise.all(promises);
}
function getMembers (groups) {
var promises = [];
var promise;
for (var i = 0; i < groups.length; i++) {
console.log('Group #' + i + ': ' + JSON.stringify(groups[i]));
promise = getMembers(groups[i]);
promise.then(expandMembers);
promises.push(promise);
}
return Promise.all(promises);
}
function listGroups (groups) {
getGroups().then(getMembers).then(success);
}
Однако это не будет ждать под-обещаний (и фактически возвращает список пустых списков, по одному для каждой группы).
То, чего я хочу достичь:
- Получить все группы (
getGroups
).
- Для каждой группы получают всех участников (
getMembers
).
- Задать элементы для группового объекта.
- Для каждого терминала в членах группы получить подробную информацию о терминале (
getTerminal
).
- Заменить краткую информацию о терминале на подробную информацию о терминале.
- Если все вышеперечисленное сделано, отобразить список JSON для групп.
Я в растерянности.