2017-09-29 11 views
1

以下の例で構成されたコードをDisplay IdentityTask results in Popupに変更しています。dojo/-base/array.mapから配列を返す前にdojo/request/xhrが終了するのを待って

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]); 

私の問題は、私はidentifyTask.executedeferred変数の初期化を完了するまでapp.map.infoWindow.setFeatures([deferred]);が実行されない保証する方法を見つけ出すことができないです。私はいくつかの場所で.then()を使用しようとしましたが、動作させることができませんでした。 arrayUtils.map関数は、が期待する配列featuresを返します。

答えて

0

私はarrayUtils.mapdojo/_base/array.map()メソッドであることを明確にしていませんでした。問題は、app.map.infoWindow.setFeatures()が呼び出される前にコール(「dojo/request/xhr」)とarrayUtils.mapが終了する必要があるまで、データが返されるまで待つ必要があるたびに、arrayUtil.mapの反復が必要でした。私の解決策は、returnを削除し、延期された変数に.thenを使用することでした。私はまた、dojoXhrsync: 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); 
      }); 
関連する問題