Как повторить http-вызов в AngularJS, если данные ответа нулевые и статус ответа 200 - PullRequest
0 голосов
/ 13 сентября 2018

Я использую сервис, который отправит обратно 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);
    });

Как я могу повторить http-вызов внутри моего successCallback, если response.data равны нулю? Я попытался повторить это в errorCallback, но response.status всегда равно 200 и функция ошибки никогда не выполняется.

1 Ответ

0 голосов
/ 13 сентября 2018

Как насчет этого кода?

Метод

$ q.reject позволяет отклонить текущее обещание. Если обещание отклонено, обратный вызов метода 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);
});
...