【发布时间】:2017-12-29 12:37:33
【问题描述】:
我有一个 REST 服务,提供一个“Json”对象列表,每个对象都可能具有指向其自身类的另一个资源的链接。从一个特定的开始,我需要全部获取它们,执行递归 http 调用。 于是我写了:
var steps = [];
var recursiveLookup = function(processId) {
return $.ajax({
url: SERVER_URL + processId,
success: function (activity) {
// Activity has a set of json objects called steps
var rtn = activity.path.map(step => {
if (step.type != "Node") {
steps.push(step);
} else {
return recursiveLookup(step.subProcessIntanceId);
}
}).filter(a => a != undefined);
return rtn;
}
});
}
这会正确地将所有对象加载到全局步骤 var 中。 我需要确保方法已经完成,所以我写道:
var promises = recursiveLookup(processId);
Promise.all(promises).then(function () {
console.log(steps);
});
但它不起作用,因为“recursiveLookup”正在返回 $.ajax 的承诺,而不是假装使用成功方法返回的承诺集。
此外,是否可以将步骤作为返回值从“recursiveLookup”方法中获取,而不是将其用作全局变量?
【问题讨论】:
-
添加异步:false
-
是我还是你的函数有 2 个返回值?我的意思是你首先返回 rtn,然后尝试返回 ajax 本身。
-
“此外,是否可以将步骤作为返回值从 'recursiveLookup' 方法中获取,而不是将其用作全局变量?”您可以使用成功: $.proxy(function(activity) { #code }, steps)
-
你的服务器不能在一个请求中产生整个递归树响应吗?
标签: javascript jquery