How to return a value using $ q in angular js?

How can I return data using a promise
I got an error that successdata is not a function in my controller, I don’t know what I am doing wrong. Am I missing something in my controller? I observe that the response of the debugging application arrives at the service, but nothing is returned from it

 var module = angular.module('app', []);
module.service("webservice", function($http,$q) {

    return {
        callservice:function(method,url,_data){
            var deferred = $q.defer();
            var promise = deferred.promise;
            $http({
                method: method,
                url: App_Service_api+url,
                data: _data,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).
            success(function (data, status, headers, config) {
                if (data.success) {
                    deferred.resolve(data.message);
                    //return deferred.promise;
                    promise.successdata = function(fn) {
                        promise.then(fn);
                        return deferred.promise;
                    }
                }
                else {
                    deferred.reject("Plase Enter valid data.");
                    //return deferred.promise;
                    promise.errordata = function(fn) {
                        alert("error");
                        promise.then(null, fn);
                        return deferred.promise;
                    }
                }

            }).
            error(function(data, status, headers, config){
                deferred.reject("Plase Enter valid data.");
                //return deferred.promise;
                promise.errordata = function(fn) {
                    promise.then(null, fn);
                    return deferred.promise;
                }
            }); 

        }
    }
})

Here is my controller code

webservice.callservice('POST',App_Service_login,inputs).successdata(function(data){
                var alertPopup = $ionicPopup.alert({
                    title: 'Login Succesfull!',
                    template: 'Please check your credentials!'
                });
            })
                .errordata(function(data) {
                    var alertPopup = $ionicPopup.alert({
                        title: 'Login failed!',
                        template: 'Please check your credentials!'
                    });
                });
+4
source share
3 answers

I reworked your code a bit. Regards, I didn’t understand why you created the functions successdataand errordata. You can try something simpler:

Services:

module.service("webservice", function($http, $q) {
    return {
        callservice: function(method, url, _data){
            var deferred = $q.defer();
            $http({
                method: method,
                url: App_Service_api + url,
                data: _data,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).
            success(function (data, status, headers, config) {
                if (data.success) {
                    deferred.resolve(data.message);
                }
                else {
                    deferred.reject("Plase Enter valid data.");
                }
            }).
            error(function(data, status, headers, config){
                deferred.reject("Plase Enter valid data.");
            }); 
            return deferred.promise;
        }
    }
});

Controller:

webservice.callservice('POST', App_Service_login, inputs).then(function(dataMessage){
    console.log('dataMessage', dataMessage);
    var alertPopup = $ionicPopup.alert({
        title: 'Login Succesfull!',
        template: 'Please check your credentials!'
    });
})
.catch(function(errorMessage) {
    console.log('errorMessage', errorMessage);
    var alertPopup = $ionicPopup.alert({
        title: 'Login failed!',
        template: 'Please check your credentials!'
    });
});

UPDATE:

service , http. data.success = false, , Status 400 Bad Request data.message = 'Please Enter valid data'. data.success , , :

:

module.service("webservice", function($http, $q) {
    return {
        callservice: function(method, url, _data){
            return $http({
                method: method,
                url: App_Service_api + url,
                data: _data,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            });
        }
    }
});

Angular $http doc:

200 299 callback success. , , XMLHttpRequest , , .

+2

, , , . :

    success(function (data, status, headers, config) {
        if (data.success) {
            deferred.resolve(data.message);
        }else{
            deferred.reject(...)
        }

webservice.callservice('POST',App_Service_login,inputs)
.then(function(data){
   var alertPopup = $ionicPopup.alert({..})
}, function(err){
  //errorhandling
});
0

$http he returns the promise himself, so there is no need to create a new deferred there.

All this can be simplified:

var module = angular.module('app', []);
module.service("webservice", function($http,$q) {

    return {
        callservice:function(method,url,_data){
            return $http({
                method: method,
                url: App_Service_api+url,
                data: _data,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).
            then(function (response) {
                if (response.data.success) {
                    return data.message;
                }
                else {
                    $q.reject("Plase Enter valid data.");
                }
            }, function() {
                $q.reject("Plase Enter valid data.");
            }); 
        }
    }
});
0
source

Source: https://habr.com/ru/post/1612253/


All Articles