2015-12-11 80 views
2

我很难理解所有不同的博客和例子,关于如何正确使用角度的承诺,所以请向某人澄清一些请求。

正在使用传递给服务get方法来设置控制器变量这样的错误的回调?

会议服务:

self.getSessions = function(callback) { 

    $http.get(self.urls.sessionsList).then(
    function (response) { 
     callback(response.data); 
    }, 
    function (response) { 
     // failure 
    } 
); 

}; 

从该控制器:

.controller('SessionsController', ['Session', function(Session) { 
    var self = this; 

    self.sessions = []; 

    Session.getSessions(function(data) { 
    self.sessions = data; 
    }); 
}]) 

回答

2

Q)是使用了传递给服务get方法回调设置控制器>>这样的变数是否错误?

不,这是没有错的,但是你可以使用电源的承诺,改变你的代码类似下面,在那里你可以链接到“然后”方法:

self.getSessions = function() { 

     return $http.get(self.urls.sessionsList); 
} 

,改变你的控制器代码是:

.controller('SessionsController', ['Session', function(Session) { 
    var self = this; 

    self.sessions = []; 

    Session.getSessions().then(function(response) { 
    self.sessions = response.data; 
    }); 
}]); 

然后,你可以看到,调用者可以链到“然后”,做越来越多的功能,...

希望有所帮助。

+0

第一个代码片段是其规范形式的延迟反模式。它必须是'返回$ http.get(self.urls.sessionsList)'一行。 – estus

+0

谢谢奥马尔。我理解这种差异,但是我的控制器也必须处理$ http错误路径。这不会让控制器太麻烦吗?不应该只在控制器中绑定UI代码? – Dave

0

使用承诺是坏事,因为es6的承诺被释放

+0

你是什么意思?我不明白你想说什么抱歉。 – Dave

+0

抱歉,我对英语不太好,我想说的是,在一个人推荐使用诺言之前,但自从ecma 6出来后,这不是一件好事。 – NBeydon