我正在使用一项服务,该服务将发送回带有数据的XML作为响应。通常,一切正常,但有时服务器会错误地发送没有数据的空XML。
var isokLayer = $http({
method: 'GET',
url: URLs.GEOSERVER_ISOK
}).then(function(response) {
if (response.status == 200) {
do {
var formatter = new ol.format.WMTSCapabilities();
} while (response.data == null);
var datas = (formatter.read(response.data));
var options = ol.source.WMTS.optionsFromCapabilities(datas, {
layer: 'CIEN',
matrixSet: 'EPSG:2180',
});
var source = new ol.source.WMTS(options);
for (var z = 0; z < source.getTileGrid().getMatrixIds().length; ++z) {
source.getTileGrid().getOrigin(z).reverse();
}
var result = new ol.layer.Tile({
source: source,
visible: false,
xarisLayerType: 'baseLayer',
xarisLayerName: 'NMT LPIS',
xarisLayerSampleIcon: 'assets/styles/img/baseLayerSample/nmt.png',
zIndex: ConfigService.getBaseLayerZIndex()
});
map.addLayer(result);
layerList.push(result);
} else {
console.log(response.status);
}
}, function(err) {
console.log(err);
});
如果response.data为null,我如何在我的successCallback内部重复http调用?我尝试在errorCallback中重复此操作,但response.status始终为200,并且永远不会执行错误功能。
答案 0 :(得分:0)
该代码怎么样?
$q.reject方法可让您拒绝当前的承诺。如果Promise被拒绝,则'then'方法的回调将停止,并执行catch回调。
var isokLayer = $http({
// ...
}).then(function(response) {
if (response.status == 200 && response.data) {
// ...
} else if (response.data == null) {
return $q.reject(response);
} else {
console.log(response.status)
}
}).catch(function(errResponse) {
console.log(errResponse);
});