Reputation: 37
So i have multiple functions that all use approximately the same $promise.then -> catch chaining. I was wondering how i could make this as a separate function to reduce duplicate code.
Example of two functions that use "almost" the same chaining:
neDynamicMapService
function checkGeoDataServiceDynamicMap() {
neDynamicMapService.get({
'bbox': '282254.0907785857,7067749.991627717,283178.8115196741,7068194.492510452',
'size': '699,336',
'dpi': '96',
'format': 'png24',
'transparent': 'true',
'bboxSR': 25833,
'imageSR': 25833,
'layers': 'show:1,2,3',
'layerDefs': '{"3":"seksjonsnr=0}"',
'token': $scope.geoToken,
'f': 'image'
}).$promise.then(
function callback(data) {
$scope.geoDataServiceDynamicMap = ((data.data !== null) && (data.headers[Object.keys(data.headers)[0]] === "image/png")) ? 'geoDataServiceDynamicMap_OK' : 'monitoring_fail';
$scope.allChecks.push($scope.geoDataServiceDynamicMap);
}
).catch(function errback(err) {
$scope.geoDataServiceDynamicMap = 'monitoring_failure';
});
};
checkGeoDataServiceIdentity
function checkGeoDataServiceIdentity() {
neIdentityMapService.get({
'sr': '25833',
'ImageDisplay': '699,336,96',
'mapExtent': '121517.75468785927,6612387.032135592,121619.89991039888,6612464.586427085',
'geometry': 'esriGeometryPoint',
'geometryType': 'true',
'layers': 'all',
'tolerance': '0',
'token': $scope.geoToken,
'f': 'json'
}).$promise.then(
function callback(data) {
$scope.geoDataServiceIdentity = ((data.data !== null) && (data.headers[Object.keys(data.headers)[0]] === "image/png")) ? 'geoDataServiceIdentity_OK' : 'monitoring_fail';
$scope.allChecks.push($scope.geoDataServiceIdentity);
}
).catch(function errback(err) {
$scope.geoDataServiceIdentity = 'monitoring_failure';
});
};
So the question is if it is possible to make a seperate function that basically does the job of everything from $promise.then -> catch? That way i don't have to have lots of duplicates.
Upvotes: 0
Views: 44
Reputation: 1
I hope I got this right
function generic(service, getOptions, thing) {
service.get(getOptions).$promise.then(data => {
$scope[thing] = ((data.data !== null) && (data.headers[Object.keys(data.headers)[0]] === "image/png")) ? thing+"_OK" : 'monitoring_fail';
$scope.allChecks.push(thing);
}).catch(err => $scope[thing] = 'monitoring_fail');
}
You can call the above using
generic(neDynamicMapService, {
'bbox': '282254.0907785857,7067749.991627717,283178.8115196741,7068194.492510452',
'size': '699,336',
'dpi': '96',
'format': 'png24',
'transparent': 'true',
'bboxSR': 25833,
'imageSR': 25833,
'layers': 'show:1,2,3',
'layerDefs': '{"3":"seksjonsnr=0}"',
'token': $scope.geoToken,
'f': 'image'
}, 'geoDataServiceDynamicMap');
generic(neIdentityMapService, {
'sr': '25833',
'ImageDisplay': '699,336,96',
'mapExtent': '121517.75468785927,6612387.032135592,121619.89991039888,6612464.586427085',
'geometry': 'esriGeometryPoint',
'geometryType': 'true',
'layers': 'all',
'tolerance': '0',
'token': $scope.geoToken,
'f': 'json'
}, 'geoDataServiceIdentity');
Apologies for posting ES2015+ code
Upvotes: 1
Reputation: 41581
You can generalize as below
var catchFunction = function errback(err) {
$scope.geoDataServiceDynamicMap = 'monitoring_failure';
});
function checkGeoDataServiceDynamicMap() {
neDynamicMapService.get({
'bbox': '282254.0907785857,7067749.991627717,283178.8115196741,7068194.492510452',
'size': '699,336',
'dpi': '96',
'format': 'png24',
'transparent': 'true',
'bboxSR': 25833,
'imageSR': 25833,
'layers': 'show:1,2,3',
'layerDefs': '{"3":"seksjonsnr=0}"',
'token': $scope.geoToken,
'f': 'image'
}).$promise.then(
function callback(data) {
$scope.geoDataServiceDynamicMap = ((data.data !== null) && (data.headers[Object.keys(data.headers)[0]] === "image/png")) ? 'geoDataServiceDynamicMap_OK' : 'monitoring_fail';
$scope.allChecks.push($scope.geoDataServiceDynamicMap);
}
).catch(catchFunction(err))
};
function checkGeoDataServiceIdentity() {
neIdentityMapService.get({
'sr': '25833',
'ImageDisplay': '699,336,96',
'mapExtent': '121517.75468785927,6612387.032135592,121619.89991039888,6612464.586427085',
'geometry': 'esriGeometryPoint',
'geometryType': 'true',
'layers': 'all',
'tolerance': '0',
'token': $scope.geoToken,
'f': 'json'
}).$promise.then(
function callback(data) {
$scope.geoDataServiceIdentity = ((data.data !== null) && (data.headers[Object.keys(data.headers)[0]] === "image/png")) ? 'geoDataServiceIdentity_OK' : 'monitoring_fail';
$scope.allChecks.push($scope.geoDataServiceIdentity);
}
).catch(catchFunction(err))
};
Upvotes: 0