2016-08-08 1 views
0

Я довольно новичок в AngularJS и Javascript. Я создаю приложение, в котором я планирую использовать одну функцию для выполнения всей операции, связанной с ajax (фабрика в angularjs). Эта функция будет только одним шлюзом для всех операций ajax. Когда я возвращаю обещание как успех, он работает правильно. но возврат обещаний не работает.Ошибка возврата через обещание

Вот пример кода. Я ожидаю возвращение обещания в функции ошибки, если обещание не удается, но он идет к успеху

var myApp = angular.module('myApp', []); 

myApp.controller('FirstController, function($scope, util){ 
     util.doAjax().then(function(response){ 
       // This function is called in both success and error 
      }, function(err){ 
       // This is never called why ?     
      }); 
}); 

myApp.factory('util, function($http){ 
    return $http({ 
     method: 'GET', 
     url: 'http://www.example.com' 
    }).then(function(response){ 
     // This will return success promise 
     return response; 
    }, function(err){ 
     // This should return error promise 
     return err; 
    }); 
}); 
+0

это сообщение в блоге может помочь вам: http://ericnish.io/blog/add-success-and-error-to-angular-promises/ – oguzhan00

ответ

0

В настоящее время вы непосредственно возвращаете данные из функции ошибок, которая СЦЕПЛЕНИЕ обещания и назвав его основным .then метод.

При возвращении ошибки, вы должны отклонить обещание, создав новый пользовательский обещание с помощью $ Q

return $q.reject(err) 

Другая важная вещь, вы должны создать метод в службу с именем

myApp.factory('util', function($http, $q){ 
//Exposed method 
return { 
    doAjax : function() { 
     return $http({ 
      method: 'GET', 
      url: 'http://www.example.com' 
     }).then(function(response){ 
      // This will return success promise 
      return response.data; // returned data 
     }, function(err){ 
      // return error promise with err object 
      return $q.reject(err); 
     }); 
    } 
    } 
}); 
0

Таким образом, вы не возвращаете обещание.

Вы должны вернуть $ HTTP обещания вместо так:

myApp.factory('util', function($http){ 

    return { 
     ajax: function() { 
      var httpPromise = $http({ 
       method: 'GET', 
       url: 'http://www.example.com' 
      }); 

     httpPromise.then(function(response){ 
      // This will return success promise 
      // return response; 
     }, function(err){ 
      // This should return error promise 
      // return err; 
     }); 

     return httpPromise;   
    };   
}); 

А также, возвращение в резолюции обещания не нужно, вы можете использовать его для вещей и Входа для реселлеров, но он не требует возвращаемого значения потому что это само разрешение.

Смежные вопросы