javascript - Why my If statement is not working 100 % in JS in AngularJS -


enter image description herei have $scope.reasonlist iterate ng-repeat. if go , forward same page same data if operatotor not working , $scope.reasonlist empty. same data , same page? strings have been comparing. happening here , why?

var reasons = new array(); var roots = new array(); var repairs = new array(); var defectdescsarray = new array(); defectdescsarray= defectdescsvc.query(); $scope.rma = rmaservice.get({id: $routeparams.rmaid});  var rmahasdefects = rmadefectsvc.findbyrmaid({rmaid: $routeparams.rmaid});     rmahasdefects.$promise.then(function (result) {         alert('result.length:' +result.length)          (var = 0; < result.length; i++) {              (var j = 0; j < defectdescsarray.length; j++) {              if (result[i].rmahasdefectdescpk.defectdescdefectdescid === defectdescsarray[j].defectdescid) {                   $scope.showreasonlist = true;                  reasons.push(defectdescsarray[j]);              }          }       }         $scope.reasonlist = reasons;        //$scope.$apply();        alert('$scope.reasonlist.length' +$scope.reasonlist.length);                      }); 

view

<div class="col-sm-10">     <table class="table table-striped table-condensed table-hover">         <tbody>             <tr ng-repeat="defect in reasonlist">                  <td>{{ defect.returnreasonreturnreasonid.returntext}}</td>                 <td>{{ defect.text}}</td>             </tr>         </tbody>     </table> </div> 

angular service getting defects

angular.module('defectdescservice', ['ngresource'])     .factory('defectdescsvc', ['$resource',         function ($resource) {             console.log('------defectdescservice-----');             return $resource(                     '/rmaservermav/webresources/com.rako.entity.defectdesc/:id',                     {},                     {                          delete: { method: 'delete', params: {id: '@defectdescid'}},                           update: { method: 'put', params: {id: '@defectdescid'} },                          findbydefectdescid:{                             url: '/rmaservermav/webresources/com.rako.entity.defectdesc/defect/:defid',                                     method: 'get',                               params: {defid: '@defid'},                             isarray:true}                     });         }]); 

defectdescsarray applied promise. rmahasdefects promise function called , promise. rmahasdefects promise guarantee, body code executed after succesful call. problem is, when executed code run, don't have guarantee defectdescsarray array values, because promise call isn't synchronized. that's why, sometime 1 promise finish first, normal case , sometime promise finish first , reasonlist empty. prove this, log defectdescsarray in promise, , you'll see sometime it's empty , not.

for (var j = 0; j < defectdescsarray.length; j++) {     console.log('defectdescsarray length:',defectdescsarray.length);     if (result[i].rmahasdefectdescpk.defectdescdefectdescid === defectdescsarray[j].defectdescid) { 

the solution synchronise 2 promises, using promise on resource.

  defectdescsarray= defectdescsvc.query();     //using promise , second call inside promise determine not empty //array.      defectdescsarray.$promise.then(function (result) {         defectdescsarray = result;     $scope.rma = rmaservice.get({id: $routeparams.rmaid});      var rmahasdefects = rmadefectsvc.findbyrmaid({rmaid: $routeparams.rmaid});     rmahasdefects.$promise.then(function (result) {         alert('result.length:' +result.length)          (var = 0; < result.length; i++) {              (var j = 0; j < defectdescsarray.length; j++) {              if (result[i].rmahasdefectdescpk.defectdescdefectdescid === defectdescsarray[j].defectdescid) {                   $scope.showreasonlist = true;                  reasons.push(defectdescsarray[j]);              }          }       }         $scope.reasonlist = reasons;        //$scope.$apply();        alert('$scope.reasonlist.length' +$scope.reasonlist.length);                      }); }); 

i basing on this post.


Comments