Code Review Stack Exchange is a question and answer site for peer programmer code reviews. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The code below doesn't seem right to me. The scenario is:

  1. User enters in a "quantity" into a form field.
  2. If the user enters in 5, the loop below should iterate 5 times.
  3. There should now be 5 new entries in the database with the container.product and container.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;
    });
  });

});
share|improve this question
up vote 2 down vote accepted

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;
  });

});
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.