两个月前我开始与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
,但我再次收到同样的错误。
我一直试图通过谷歌搜索找到解决方案几天,但我无法弄清楚我需要做什么。
提前感谢您的帮助。
答案 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) {
});
});