patternjavascriptMinor
Iterating through a range using lodash/AngularJS and saving data
Viewed 0 times
angularjslodashiteratingrangedatausingthroughandsaving
Problem
The code below doesn't seem right to me. The scenario is:
Any advice on making this cleaner?
- User enters in a "quantity" into a form field.
- If the user enters in 5, the loop below should iterate 5 times.
- There should now be 5 new entries in the database with the
container.productandcontainer.status.
Any advice on making this cleaner?
var container = new Container($scope.batchFields);
container.product = $scope.item.originalObject._id;
container.status = 'active';
_.each($scope.batchFields, function(batch) {
_.each(_.range(batch.batchesQuantity, 0, -1), function (val,i) {
// This $save code smells a little with it
// being inside the _.each.
container.$save(function(response) {
$notify.success('purchase.order.edit.created');
if ($scope.$close) {
$scope.$close();
}
}, function(errorResponse) {
$scope.errors = errorResponse.data.message;
});
});
});Solution
Please do not make separate calls (Http requests) for saving each container,as this will affect the web application performance. Instead batch the calls ( 5 calls at one time). Store them in an array and make a single call
_.each($scope.batchFields, function(batch) {
var containersList = [];
_.each(_.range(batch.batchesQuantity, 0, -1), function(val, i) {
// store them in the array
containersList.push(new Container($scope.batchFields));
});
$http.post('saveContainers', containersList).then(function(response) {
$notify.success('purchase.order.edit.created');
if ($scope.$close) {
$scope.$close();
}
}, function(errorResponse) {
$scope.errors = errorResponse.data.message;
});
});Code Snippets
_.each($scope.batchFields, function(batch) {
var containersList = [];
_.each(_.range(batch.batchesQuantity, 0, -1), function(val, i) {
// store them in the array
containersList.push(new Container($scope.batchFields));
});
$http.post('saveContainers', containersList).then(function(response) {
$notify.success('purchase.order.edit.created');
if ($scope.$close) {
$scope.$close();
}
}, function(errorResponse) {
$scope.errors = errorResponse.data.message;
});
});Context
StackExchange Code Review Q#97532, answer score: 2
Revisions (0)
No revisions yet.