我在for循环中处理一个延迟的Dojo时遇到了麻烦。我现在正在解决这个问题,但是任何高层人士的见解都会很有帮助,这已经是一个多天的事情了。似乎Dojo延迟只能解决一次,这会导致它在for循环中崩溃。异步处理多个响应的最佳方法是什么?
这是我的代码片段,没有全局变量,一些变量在代码片段之外声明。
edit:Dojo有一个.then(),它应该处理异步请求。当使用'then()'时,我可以看到调用开始,但它们永远不会显示为完成,这对任何人来说都是正确的吗?我需要在then之后添加一个c 'deferred.callback'吗?
for (var j = 0; j < ident.length; j++) {
if(ident[j].url != "http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer"){
deferred = ident[j].execute(idParams);
}
deferred.*then*(function(response){
return dojo.map(response, function(result){
var feature = result.feature;
feature.attributes.layerName = result.layerName;
//console.log(feature.attributes);
lyrIdent.push(feature.attributes);
var template = new esri.InfoTemplate("Prefix: ${PREFIX} <br/>Suffix: ${SUFFIX}<br/>Divcode: ${DIVCODE}<br/> lmp: ${LMP} <br/>hmp: ${HMP}");
feature.setInfoTemplate(template);
return feature;
});
});
}
1条答案
按热度按时间zfycwa2u1#
现在你有一个单独的延迟对象变量,如果你想进行多个异步调用,那么你需要创建多个延迟对象,每个对象对应一个调用(如果你把它们放在一起,你怎么知道每个不同的调用什么时候完成呢?)
一旦你有了承诺列表,你应该能够使用all function(或类似的东西)来获取承诺列表,并将其转化为一个单一的承诺,当它们全部完成时,返回一个结果列表。