角$ q.all和signalR承诺

时间:2016-02-14 11:23:15

标签: javascript angularjs promise signalr

两个月前我开始与Angular合作,如果我的问题重复,请提前抱歉。

虽然,我发现了类似的问题AngularJS Promises $q.all and SignalR但我不知道如何在我的代码中使用它。

我通过signalR从服务器获取数据,只要我不从服务器获取所有数据,我想显示登录页面。我尝试用$ q.all做到这一点,但我得到了错误。贝娄是我的代码和错误。

这是我的服务:

var menuItemshub = new Hub(‘menuItemsHub’, {
    rootPath: $rootScope.defaultRootPath,
    //server side methods
    methods: [‘getMenuItems’],
    queryParams: {
        ‘token’: $rootScope.loggedInUser.accessToken,
    },
    //handle connection error
    errorHandler: function (error) {
        console.error(error);
    }
});

var countrieshub = new Hub(‘countriesHub’, {
    rootPath: $rootScope.defaultRootPath,
    //server side methods
    methods: [‘getCountries’],
    queryParams: {
        ‘token’: $rootScope.loggedInUser.accessToken,
    },
    //handle connection error
    errorHandler: function (error) {
        console.error(error);
    }
});

var menuItemshubInitDone = function () {
    return menuItemshub.promise.done();
};

var countrieshubInitDone = function () {
    return countrieshub.promise.done();
};

var getMenuItems = function () {
    return menuItemshub.getMenuItems();
};

var getCountries = function () {
    return countrieshub.getCountries();
};

这是我的控制器

configurationService.menuItemshubInitDone().then(function () {
    configurationService.getMenuItems().then(function (response) {
        // Success
        $rootScope.menuItems = response.MenuItems;
    }, function (error) {
    });
});

configurationService.countrieshubInitDone().then(function () {
    configurationService.getCountries().then(function (response) {
        // Success
        $rootScope.countries = response.Countries;
        $rootScope.selectedAction = $rootScope.countries;
        $rootScope.setAction($rootScope.selectedAction[0]);

    }, function (error) {
    });
});

我想做类似的事情:

var all = $q.all([configurationService.getCountries(), 
    configurationService.getMenuItems()]);

all.then(function () {
    $rootScope.showLandingPage = false;
});

我收到以下错误SignalR:连接尚未完全初始化。在连接开始后使用.start().done().start().fail()运行逻辑。我试过

$q.when([configurationService.menuItemshubInitDone()]);

然后调用$q.all,但我再次收到同样的错误。

我一直试图通过谷歌搜索找到解决方案几天,但我无法弄清楚我需要做什么。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我发现我做错了什么。这里的代码现在运行正常,以防其他人像我一样陷入困境:

$scope.userConfigurations = function () {

        var all = $q.all([getMenuItems, getCountries]);
        all.then(function () {
            $rootScope.showLandingPage = false;
        });

        var getMenuItems = configurationService.menuItemshubInitDone().then(function () {
            configurationService.getMenuItems().then(function (response) {
                // Success
                $rootScope.menuItems = response.MenuItems;
            }, function (error) {
            });
        });

        var getCountries = configurationService.countrieshubInitDone().then(function () {
            configurationService.getCountries().then(function (response) {
                // Success
                $rootScope.countries = response.Countries;
                $rootScope.selectedAction = $rootScope.countries;
                $rootScope.setAction($rootScope.selectedAction[0]);

            }, function (error) {
            });
        });