如果响应数据为空且响应状态为200,如何在AngularJS中重复http调用

问题描述 投票:0回答:1

我正在使用一个服务,它会发回带有数据的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,错误函数永远不会执行。

javascript angularjs httprequest angularjs-http
1个回答
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);
});
© www.soinside.com 2019 - 2024. All rights reserved.