[英]Waiting for dojo/request/xhr to finish before returning array from dojo/-base/array.map
我正在修改下面的代碼,該代碼基於Popup的Display IdentityTask results的示例構建。
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]);
期望。
我沒有明確指出arrayUtils.map
是dojo/_base/array.map()
方法。 問題是arrayUtil.map
每次迭代arrayUtil.map
需要等到從dojoXhr
調用返回的數據(即'dojo / request / xhr')和arrayUtils.map
需要在app.map.infoWindow.setFeatures()
之前完成被稱為。 我的解決方案是刪除return
.then
然后對延遲變量使用.then
。 我還為dojoXhr
添加了sync: true
。
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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.