我正在尝试让这段代码工作
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 中设置了 url,该函数仍会调用页面的来源 url。
我只想在响应返回数据时执行
<transformData
函数,但我不确定我是否正确设计了 promise/defer 结构。
最佳答案
首先,您使用的是 angulars 速记 $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 已经返回一个您可以使用的 Promise 对象,它会自动解决或拒绝,因此您可以在这种情况下直接返回它。
来源:https://docs.angularjs.org/api/ng/service/ $http
编辑:将 Angular 文档放在手边并检查它始终是一个好主意。
关于javascript - 如何使 $q 和 $http 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38119368/