我在我的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/

10-17 02:54