1

Ich habe "eckigen Fabrik" und "Winkelregler".Winkel synchrone http Anfrage

Wenn ich die Controller-Funktion anrufe, rufen Sie die werkseitige Funktion auf. Aber Controller-Funktion wartet nicht Antwort.

Und das ist meine Codes.

factory Controller

$scope.deleteCountry = function (countryId, countryName, index) { 
    alert(countryId + " " + countryName + " " + index); 
    apiUrl = url + '/' + version + '/country';   
    $scope.hasDelete = CommonFactory.deleteEntById(apiUrl,countryName,countryId);  

    alert($scope.hasDelete); 
    if ($scope.hasDelete == true) { 
     $scope.dataList.splice(index, 1); 
     ShowMessage('Hata', 'Silme işlemi başarılı', 1); 
    } 
    else { 
     ShowMessage('Hata', 'Silme işlemi başarılı değil', -1); 
    } 

} 
+0

Sie können Versprechen für diesen oder auch Callback implementieren. Nach Ihrer Wahl können Sie implementieren. –

Antwort

0

Wie wir wissen, dass JavaScript's Standardverhalten Asynchronous ist, also was auch immer Ihr Code ausgeführt wird, wird es nicht für die Ausgabe warten. Zur Lösung Ihres Problems gibt es zwei Möglichkeiten, entweder callback Muster zu implementieren oder promise zu implementieren. Ich werde Ihnen vorschlagen, Versprechen zu implementieren. Angular haben $q Service, mit diesem können wir dieses Problem lösen. Also zuerst $q in common.factory injizieren.

In Ihrem common.factory wir einige Änderungen und Code machen sieht wie folgt aus: -

common.factory('commonFactory',funtion($http,$q){ 

    //here your some code according to screenshot 

    return{ 

    deleteEntById : function (url,name,id) { var deferred = $q.defer(); 
     $http.delete(url) 
      .then(function (returnData) { 
       //Here you will check true false 
       if(returnData.status.data==-1) 
       // promise is fulfilled 
       deferred.resolve(true); 

       else 
       // promise is fulfilled 
       deferred.resolve(false); 


       return deferred.promise; 
      }).catch(function(e) { 
       // the following line rejects the promise 
       deferred.reject(e); 

      }) ; 
      // promise is returned 
     return deferred.promise; 

    } 
    } 
}); 

Und in der Controller werden wir einige Änderungen

CommonFactory.deleteEntById(apiurl,countryName,countryId).then(function(response){ 

    //do rest all your code which is depended upon deleteEntById . 

}); 

Ich hoffe, machen diese wird dein Problem lösen.

+0

$ http selbst senden Versprechen Objekt –

+0

Dies funktioniert besser. Danke KP Chundawat; – tuncgulec

+0

Ich bin froh. Es war hilfreich für dich. –

0

Ich gehe davon aus CommonFactory.deleteEntById()return $http.delete();

Verwendung .then().catch() haben muss;

CommonFactory.deleteEntById(apiUrl, countryName, countryId) 
    .then(function(response) { 
     console.log('delete success response:', response); 
     $scope.dataList.splice(index, 1); 
     ShowMessage('Hata', 'Silme işlemi başarılı', 1); 
    }) 
    .catch(function(error) { 
     console.error('delete error response:', error); 
     ShowMessage('Hata', 'Silme işlemi başarılı değil', -1); 
    }); 
+0

Vielen Dank für diese wundervolle Idee. Arbeitete :) – tuncgulec

+0

Bitte akzeptieren und upvote, wenn es hilft. –

Verwandte Themen