我正在使用一个服务,它会发回带有数据的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,错误函数永远不会执行。
这段代码怎么样?
$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);
});