我正在修改下面的代码,该代码的结构基于Display IdentityTask results in Popup上的示例。
var deferred = identifyTask.execute(identifyParams).addCallback(function (response) {
return arrayUtils.map(response, function (result) {
var feature = result.feature;
dojoXhr("/trails/trailPopupUses.action",{
query:{
parkName: feature.attributes.PARK_NAME,
trailName: feature.attributes.TRAIL_ASSOC,
},
preventCache: true
}).then(function(data) {
useString = data;
return feature;
}, function(err) {
featureResultsContent.innerHTML = "An unexpected error occurred: " + error;
});
});
});
app.map.infoWindow.setFeatures([deferred]);
我的问题是,在app.map.infoWindow.setFeatures([deferred]);
完成初始化identifyTask.execute
变量之前,我无法弄清楚如何确保deferred
不执行。我曾尝试在几个地方使用.then()
,但无法让它工作。 arrayUtils.map
函数返回features
的数组,这是app.map.infoWindow.setFeatures([deferred]);
期望的数组。
答案 0 :(得分:0)
我没有说清楚arrayUtils.map
是dojo/_base/array.map()
方法。问题是arrayUtil.map
的每次迭代都需要等到dojoXhr
调用返回的数据(' dojo / request / xhr')和所需的arrayUtils.map
在调用app.map.infoWindow.setFeatures()
之前完成。我的解决方案是删除return
并在延迟变量上使用.then
。我还在sync: true
添加了dojoXhr
。
var featureArray;
var deferred = identifyTask.execute(identifyParams);
deferred.then(function (response) {
featureArray = arrayUtils.map(response, function (result) {
var feature = result.feature;
dojoXhr("/trails/trailPopupUses.action",{
query:{
parkName: feature.attributes.PARK_NAME,
trailName: feature.attributes.TRAIL_ASSOC,
},
preventCache: true,
sync: true
}).then(function(data){
useString = data;
});
feature.setInfoTemplate(testTemplate);
return feature;
});
return featureArray;
}).then(function(featureArray){
app.map.infoWindow.setFeatures(featureArray);
});