2014-10-28 2 views
3

У меня есть эта функция, которую я использую, чтобы вызвать $ http, сделать некоторый код, а затем вернуть успех или отказаться от обещания.Есть ли более компактный способ вернуть отсрочку с помощью функции AngularJS внутри функции?

function getActions() { 
    var self = this; 
    var defer = this.$q.defer(); 
    this.$http({ 
     url: '/api/Action/GetActions', 
     method: "GET" 
    }) 
     .success(function (data) { 
      // Other code here for success 
      self.Actions = data; 
      return defer.resolve(); 
     }) 
    return defer.promise; 
}; 

Я хотел бы упростить это, просто делать что-то вроде:

return this.$http({ 
     url: '/api/Action/GetActions', 
     method: "GET" 
    })... etc 

Но если я сделаю это, то я не буду в состоянии иметь любой код в успехе.

Может ли кто-нибудь сказать мне, есть ли способ, которым я могу упростить код?

ответ

3
function getActions() 
{ 
    var self = this; 

    var promise = this.$http({ 
     url: '/api/Action/GetActions', 
     method: "GET" 
    }); 

    promise.success(function (data) { 
     // Other code here for success 
     self.Actions = data; 
    }); 

    return promise; 
} 
0

Вы можете использовать

function getActions() { 
    return this.$http({ 
     url: '/api/Action/GetActions', 
     method: "GET" 
    })... etc 
} 
getActions().success(function(data){ 
    self.Actions = data; 
    //...do other stuff on success as well 
}) 

Лично мне нравится ваш оригинальный подход лучше, хотя, как это позволяет нескольким затем/успех/неудачу блоков (один, что происходит после того, как запрос HTTP и один дополнительный, который вы можете установить в вашем возвращенном обещании). Я использую этот подход все время, хотя он немного дольше.

0

В success и error методы, добавленные в обещание вернулся из $http не ведут себя как стандартный then или catch относительно пообещать цепочки. Если вы используете then, вы можете цепи обещания как стандарт:

function getActions() { 
    var self = this; 
    return this.$http({ 
    url: '/api/Action/GetActions', 
    method: "GET" 
    }).then(function(response) { 
    // Other code here for success 
    self.Actions = response.data; 
    return response; 
    }); 
}; 

Мой совет просто игнорировать существование success и error, а также использовать then и catch.

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