如何使用一个变量放置两个执行语句

how to place two execute statements with one variable?

本文关键字:两个 执行 语句 一个 何使用 变量      更新时间:2023-09-26

我想使用 javascript/dojo 用一个变量触发以下两个执行语句。

identifyTaskParcels.execute(identifyParams);
identifyTaskZoning.execute(identifyParams);

我尝试了以下各种变体:

var deferred = [identifyTaskParcels.execute(identifyparams), identifyTaskZoning.execute(identifyParams)];

这是可以做到的吗?

编辑

我正在尝试构建一个 Web 制图应用程序,该应用程序从 2 个服务中提取信息,并在带有功能信息的信息窗口/弹出窗口中显示它们。

使用 1 个服务很容易做到,但我发现使用 2 个服务很难做到。工作代码示例:

编辑 2

    dojo.require("esri.dijit.Popup"); //Infowindow
var identifyTask,identifyParams;    
      function mapReady(map){
       dojo.connect(map,"onClick",executeIdentifyTask);
       //create identify tasks and setup parameters 
       identifyTaskZoning = new esri.tasks.IdentifyTask("https:path/to/url/service");
       identifyTaskParcels = new esri.tasks.IdentifyTask("https://path/to/url/service");
            //Set Zoning Parameters
       identifyParamsZoning = new esri.tasks.IdentifyParameters();
       identifyParamsZoning.tolerance = 3;
       identifyParamsZoning.returnGeometry = true;
       identifyParamsZoning.layerIds = [0,1,2,3,4];
       identifyParamsZoning.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_VISIBLE;
       identifyParamsZoning.width  = map.width;
       identifyParamsZoning.height = map.height;
            //Set Parcel Parameters
       identifyParamsParcels = new esri.tasks.IdentifyParameters();
       identifyParamsParcels.tolerance = 3;
       identifyParamsParcels.returnGeometry = true;
       identifyParamsParcels.layerIds = [0,1,2,3,4];
       identifyParamsParcels.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_VISIBLE;
       identifyParamsParcels.width  = map.width;
       identifyParamsParcels.height = map.height;
       //resize the map when the browser resizes
       dojo.connect(dijit.byId('map'), 'resize', map,map.resize);
      };
   function executeIdentifyTask(evt){
     identifyParamsParcels.geometry = evt.mapPoint;
     identifyParamsParcels.mapExtent = map.extent;
     var deferred = identifyTaskParcels.execute(identifyParamsParcels);
     deferred.addCallback(function(response){
       if (response.length > 0) {
//         console.log(response.length)
//         response is an array of identify result objects    
//         Let's return an array of features.
        return dojo.map(response, function(result){
          var feature = result.feature;
          feature.attributes.layerName = result.layerName;
          if(result.layerName === 'TaxParcel'){
              console.log(feature.attributes.NAME);
              var template = new esri.dijit.PopupTemplate({
                            title:"Parcels",
                            description:"<b>Parcel ID:</b> {Parcel Identification Number} <br/> <b>Address:</b> {Site Address}"
                            });
              feature.setInfoTemplate(template);
            }
                return feature;
        });
        }
      else {
          identifyParamsZoning.geometry = evt.mapPoint;
          identifyParamsZoning.mapExtent = map.extent;
          var deferred = identifyTaskZoning.execute(identifyParamsZoning);
          deferred.addCallback(function(response){
            // response is an array of identify result objects    
            // Let's return an array of features.
            return dojo.map(response, function(result){
              var feature = result.feature;
              feature.attributes.layerName = result.layerName;
            if(result.layerName === 'Zoning Classifications'){
              console.log(feature.attributes.NAME);
              var template = new esri.dijit.PopupTemplate({
                            title:"Zoning",
                            description:"<b>Zoning:</b> {Zoning Classification} <br/> <b>Description:</b> {Zoning Description}"
                            });
              feature.setInfoTemplate(template);
            }
            else if (result.layerName === 'Assisted Living Facilities'){
              var template = new esri.dijit.PopupTemplate({
                            title:"Assisted Living Facilities",
                            description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Applicant:</b> {BusinessApplicantName} <br/> <b>No. of Residents</b> {NbrResidents}"
                            });
              feature.setInfoTemplate(template);
            }
                        else if (result.layerName === 'Family Divisions'){
              var template = new esri.dijit.PopupTemplate({
                            title:"Family Divisions",
                            description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Project Number:</b> {project_nbr} </br> <b>Status:</b> {Status}"
                            });
              feature.setInfoTemplate(template);
            }
                        else if (result.layerName === 'Policy 120'){
              var template = new esri.dijit.PopupTemplate({
                            title:"Policy 120",
                            description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Business Name:</b> {BusinessName} </br> <b>Date of Letter:</b> {DateOfLetter}"
                            });
              feature.setInfoTemplate(template);
            }
                        else if (result.layerName === 'Zoning Changes'){
              var template = new esri.dijit.PopupTemplate({
                            title:"Zoning Changes",
                            description:"<b>Parcel ID:</b> {Parcel} <br/> <b>Request Number:</b> {REQUEST_NBR} </br> <b>Property Owner:</b> {PROPERTY_OWNER}"
                            });
              feature.setInfoTemplate(template);
            }
            return feature;
            });
          });
      };
        map.infoWindow.setFeatures([deferred]);
        map.infoWindow.show(evt.mapPoint);          
      });
        map.infoWindow.setFeatures([deferred]);
        map.infoWindow.show(evt.mapPoint);      
      };

我不确定我是否理解这个问题,但似乎您需要dojo/promise/all

require(["dojo/Deferred", "dojo/promise/all"], function(Deferred, all) {
    var taskParcels = new Deferred();
    var taskZoning = new Deferred();
    var deferred = all([taskParcels, taskZoning])
    deferred.then(function(result) {
        console.log(result);
    });
    taskParcels.resolve('hello');  
    setTimeout(function() {
        taskZoning.resolve('world');
    }, 1000);
});

查看实际操作:http://jsfiddle.net/phusick/S3b4B/