我在努力让这段代码正常工作
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;
}但我有两个问题:
transformData函数,而且我不确定是否正确地设计了诺言/延迟结构。发布于 2016-06-30 09:45:55
首先,您使用角度速记$http.get。这个有$http.get(url,config)的函数签名,所以应该是
$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
编辑:把这些角度的文档放在手边,并检查一下这一点总是个好主意。
发布于 2016-06-30 09:54:48
尽管@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。
https://stackoverflow.com/questions/38119368
复制相似问题