我正在尝试为Web应用程序API实现前端。需要进行三个Ajax调用。
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
正确地链接各个Promises(实际上是s)。
我尝试了以下方法:
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
)。我很茫然。
then()
返回一个新的Promise,它在传递的函数返回时进行解析。因此,如果我正确理解了您的问题,那么您可能会想这样做:
for (var i = 0; i < terminals.length; i++) {
promise = getTerminal(terminals[i]);
promises.push(promise.then(setTerminal(terminals, i)));
}
return Promise.all(promises);
(适用于您所有的Promise组)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句