是否有更紧凑的方法在函数内返回AngularJS的延迟?

时间:2014-10-28 17:16:48

标签: angularjs

我有这个函数用于调用$ http,执行一些代码然后返回成功或拒绝承诺。

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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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
})

我个人更喜欢你原来的方法,因为它允许多个then / success / fail块(一个在http请求之后发生,一个可选,你可以在你的返回的promise中设置)。我实际上一直使用这种方法,即使它有点长。

答案 2 :(得分:0)

success返回的承诺中添加的error$http方法在承诺链方面的行为不符合标准thencatch 。如果您使用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;
  });
};

我的建议是忽略successerror的存在,并使用thencatch