2016-06-30 43 views
1

我想获得此代码工作

getDataObject = { 
    transformData: function (wmsLayer) { 
    var promise = this.getDataFromServer(wmsLayer); 
    promise.then(
     function(XMLInput){ 
      layers = $(XMLInput).find('LayerDescription').each(function() { 
       var item = $(this); 
       var layerName = item.attr('name'); 
       layerNames.push(layerName); 
      });  
      }, 
     function(data){ 
       this.error(data) 
       }); 
}, 

getDataFromServer: function(wmsLayer) { 
var deferred = $q.defer(); 
var layerGroup = wmsLayer.params.LAYERS[0]; 
    $http.get({ 
     url : '//localhost/geoserver/BL_WFS/wms', 
     params : { 
      service : 'WMS', 
      version : '1.1.1', 
      request : 'DescribeLayer', 
      layers : layerGroup, 
     }, 
     responseType : 'xml' 
    }) 
    .success(function(data){ 
     deferred.resolve(data); 
    }) 
    .error(function(error){ 
     deferred.reject(error); 
    }); 
return deferred.promise;   
} 

但我在两个问题上运行:虽然我设置的$ HTTP的功能保持调用网址该网址

  1. 页面来自。

  2. 我想执行transformData函数只有当响应回来的数据,我不知道我设计的承诺/推迟结构正确。

回答

2

首先,您正在使用angulars简写$ http.get。这其中有$ http.get(URL,配置)函数签名所以它应该是

$http.get('//localhost/geoserver/BL_WFS/wms', { 
    params : { 
     service : 'WMS', 
     version : '1.1.1', 
     request : 'DescribeLayer', 
     layers : layerGroup, 
    }, 
    responseType : 'xml' 
}) 

其次,$ HTTP已经返回无极对象,你可以使用它就会自动解决或拒绝这样你就可以直接返回在这种情况下。

来源https://docs.angularjs.org/api/ng/service/ $ HTTP

编辑:保持手头的角度记录和检查它,这是一个好主意。

+0

我改变了代码,但仍然在问题n.2中运行。当我到达promise的'then()'方法时,成功代码没有得到执行,代码流只是跳过该方法,继续并在所有函数完成运行后完成。数组填充后还有更多事情要做。我试图复制then方法中的所有代码,但它仍然是一样的。当它到达时()它不会进入内部。 – user3523583

+0

是的,谢谢你的回答我看了一下代码,我需要调整一些其他的东西来让代码在我想要的时候执行。 – user3523583

1

虽然@ SargoDarya的回答是正确的,但我想我会澄清如何更改您的代码。

更改此:

getDataFromServer: function(wmsLayer) { 
    var deferred = $q.defer(); 
    var layerGroup = wmsLayer.params.LAYERS[0]; 
    $http.get({ 
     url : '//localhost/geoserver/BL_WFS/wms', 
     params : { 
      service : 'WMS', 
      version : '1.1.1', 
      request : 'DescribeLayer', 
      layers : layerGroup, 
     }, 
     responseType : 'xml' 
    }) 
    .success(function(data){ 
     deferred.resolve(data); 
    }) 
    .error(function(error){ 
     deferred.reject(error); 
    }); 
    return deferred.promise;   
} 

要这样:

getDataFromServer: function(wmsLayer) { 
    var layerGroup = wmsLayer.params.LAYERS[0]; 
    return $http.get('//localhost/geoserver/BL_WFS/wms', { 
     params : { 
      service : 'WMS', 
      version : '1.1.1', 
      request : 'DescribeLayer', 
      layers : layerGroup, 
     }, 
     responseType : 'xml' 
    });  
} 

由于$http.get回报promise了。