角度服务,如何同时进行呼叫等待

时间:2015-10-07 17:11:53

标签: angularjs controller angular-promise angular-services

我有两个控制器同时想要相同的数据,但我不想要绑定数据。

所以我有一项服务来获取具有此方法的用户数据:

var getUserData: function() {
    if (!angular.isDefined(this.userData)) {

        return new RESTUtil.getData('userData').then(function(data) {
            this.userData = data;
            return this.userData
        })
    } else {
        return this.userData
    }
}

然后我有两个控制器可以为不同的目的提取数据:

controller('ControllerA', ['$scope', '$rootScope', 'DataService'], function($scope, $rootScope, DataService) {
    var ctrlA = this;
    DataService.getUserData().then(function(data) {
        ctrlA.userData = data;
    });
});

controller('ControllerB', ['$scope', '$rootScope', 'DataService'], function($scope, $rootScope, DataService) {
    var ctrlB = this;
    DataService.getUserData().then(function(data) {
        ctrlB.userData = data;
    });
});

所以我目前编写的问题是ControllerA和ControllerB都在RESTUtil调用返回之前命中了getUserData服务,所以我最终得到了两次数据调用。

我认为我在控制器B中使用$ scope。$来收听来自ControllerA的广播,但这会绑定数据。

基本上如果ctrlA.userData = this并且我改变ctrlB.userData =那个,我不希望绑定两个userData对象,那么它们应该被实例化。

关于我如何能得到的任何建议。)编写我的服务逻辑,其中在REST调用发生时对getUserData的任何调用将等待并使用相同的数据调用,或者B.)播放不具有的广播结合?

我在这里发布了一个类似的问题:Have multiple calls wait on the same promise in Angular

但是我不确定如何利用$ http,因为我的实际webservice调用是在RESTUtil.getData()中抽象出来的;

0 个答案:

没有答案