gpt4 book ai didi

javascript - 在继续之前等待在 AngularJS 中解决的 promise

转载 作者:行者123 更新时间:2023-11-30 05:38:51 25 4
gpt4 key购买 nike

在我的 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 返回所需的时间比某些 Controller 执行和构建模板所需的时间要长一些 - 在这些情况下,模板中的某些指令需要$rootScope.globalJSON 可用。如果不是,那些指令和任何其他需要它的东西都会出错。

有没有办法暂停应用程序,直到该 promise 得到履行?或者我应该在之后将它从 angular 和 bootstrap angular 中分离出来吗?

最佳答案

它可能不是最优雅的,但我想出了一个解决方案来解决我的应用程序中的类似问题,我想在应用程序加载时从服务器检索 i18n 资源包。

基本思想是,虽然您的请求是异步的,但获得 promise 是同步的。如果您在该对象上设置占位符值,您至少可以伪造您需要的引用,直到它们最终到达。从那里利用 AngularJS 的数据绑定(bind)将绑定(bind)更新为 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 的绑定(bind)机制处理的数据(因此能够在您获得正确的 globalJSON 时更新绑定(bind))。

关于javascript - 在继续之前等待在 AngularJS 中解决的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21945360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com