Javascript 在继续之前,等待AngularJS中的承诺解决
在我的angularJavascript 在继续之前,等待AngularJS中的承诺解决,javascript,angularjs,Javascript,Angularjs,在我的angularapp.run()方法中,我调用了一个API来获取一些数据,然后将这些数据附加到$rootScope-应用程序在不同的地方需要这些数据,因此这对我来说似乎是获取数据的地方 代码是: var app = angular.module('app', ['ngAnimate', 'infinite-scroll', 'ui.router', 'ui.bootstrap', 'app.filters', 'app.services', 'app.directives', 'app.c
app.run()
方法中,我调用了一个API来获取一些数据,然后将这些数据附加到$rootScope
-应用程序在不同的地方需要这些数据,因此这对我来说似乎是获取数据的地方
代码是:
var app = angular.module('app', ['ngAnimate', 'infinite-scroll', 'ui.router', 'ui.bootstrap', 'app.filters', 'app.services', 'app.directives', 'app.controllers'])
.run(['$templateCache', '$rootScope', '$state', '$stateParams', '$modalStack', 'appInit', function ($templateCache, $rootScope, $state, $stateParams,$modalStack, appInit) {
// set loading to 0 for loading mask
$rootScope.loading = 0;
var globalPromise = appInit.getGlobal();//
//var globalPromise = appInit.getGlobal();
globalPromise.then(function (data) {
// attach globalJSON to rootScope
$rootScope.globalJSON = data;
});
}]);
因此,我需要在应用程序的其余部分运行之前完成globalPromise.then()
我遇到的问题是,有时globalPromise
返回所需的时间比某些控制器执行和构建模板所需的时间稍长,在这些情况下,模板中的某些指令需要$rootScope.globalJSON
可用。如果不是,那么这些指令和其他任何需要它的指令都会出错
有没有办法暂停应用程序,直到承诺兑现?或者我应该将其从angular和bootstrap angular中分离出来吗?这可能不是最优雅的,但我在应用程序中提出了一个类似问题的解决方案,我想在应用程序加载时从服务器检索i18n资源包 其基本思想是,虽然请求是异步的,但获得承诺是同步的。如果在该对象上设置占位符值,至少可以伪造所需的引用,直到它们最终到达。在此基础上,利用AngularJS的数据绑定将绑定更新为promise的实际结果
var globalPromise = appInit.getGlobal();//
globalPromise.then(function (data) {
// attach globalJSON to rootScope
$rootScope.globalJSON = data;
});
angular.extend(globalPromise, { /* insert your placeholder object data here */ });
$rootScope.globalJSON = globalPromise;
我假设您正在获取的数据是将由Angular的绑定机制处理的数据(因此,当您获得正确的globalJSON时,能够更新绑定)。不管您已经解决了一个问题,我想分享一个我发现几乎完全相同的问题的解决方案 在应用程序的sturtup上,我必须使用
$http
服务来获取一些数据,在成功回调时,将这些数据保存到服务中,这些数据已经被几个控制器使用过。然而,有时这个异步调用的速度不够快,无法在使用其数据之前完成。为了解决这个问题,我不得不使用$broadcast
服务
这就是我的服务(在咖啡脚本中):
我在控制器中要做的就是等待'myData:updated'
事件:
app.controller 'MyCtrl', ($scope, Task) ->
$scope.$on 'myData:updated', (event, data) ->
$scope.myData = data
# do whatever you like with that data
希望它能帮助别人
$rootScope.$state=$state$rootScope.$stateParams=$stateParams代码>你为什么要这样做?这是其他领域所需要的-没有发布每一行代码,尽管这部分与我的问题无关。谢谢Rich,这会很好:)
app.controller 'MyCtrl', ($scope, Task) ->
$scope.$on 'myData:updated', (event, data) ->
$scope.myData = data
# do whatever you like with that data