簡體   English   中英

從dojo / -base / array.map返回數組之前,等待dojo / request / xhr完成

[英]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.mapdojo/_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM