我在我的angular 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
可用。如果不是,那些指令和其他需要它的东西就会出错。有没有办法可以暂停应用程序,直到兑现承诺?还是应该在之后将其与角度和自举角度分开?
最佳答案
它可能不是最优雅的,但是我想出了一个针对我的应用程序中类似问题的解决方案,我想在应用程序加载时从服务器检索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时便能够更新绑定)。
关于javascript - 等待 promise 在AngularJS中解决后再继续,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21945360/