【问题标题】:AngularJS promise in app.run() [duplicate]app.run() 中的 AngularJS 承诺 [重复]
【发布时间】:2015-04-20 23:09:13
【问题描述】:

我正在处理 angularJs 和 typescript 项目。在启动客户端应用程序并加载 UI 之前,我必须进行同步 http 调用并从服务器获取一些数据。我在互联网上搜索,看到每个人都在谈论承诺,嗯,好吧,为什么不呢。所以我在我的 app.run() 中使用了 Promise(调用 $http 并使用 $q 返回 Promise)。也许我什么都没有,因为这根本不起作用。 Angular 启动 app.config(),然后 app.run(),... 但是 Angular 在启动 app.run() 之前不会等待 app.config() 完成。所以我的第一个承诺是在 app.run() 中启动,在它解决 Angular 之前尝试实例化控制器......我不想创建新的服务调用 httpSynchronous 但我没有任何其他想法。

【问题讨论】:

  • 请更新一些代码:D
  • 你能把http同步调用移到你的app.run吗?然后,您可以使用取决于结果的代码进入成功块。

标签: javascript angularjs promise synchronous


【解决方案1】:

Angular 不支持 .config.run 函数中的异步操作。如果您想延迟申请,有两种方法:

  • 第一个是通过使用 angular.bootstrap() 手动启动它来延迟整个应用程序。但是您所做的任何事情都在 Angular 之外,因此您只能访问原生 JavaScript。
  • 第二个是使用路由的解析属性。如果您使用像 angular route segmentui router 这样的路由器,您可以定义一个顶级路由/状态,并在您的应用程序加载时解析该解析(如果您强制完全重新加载您的路由)。

【讨论】:

  • 感谢您的回答,但我不能使用第一个解决方案,因为我必须进行多次 http 调用并初始化 angularJs 组件(服务、指令......)所以这个解决方案将非常难看。而且我已经在互联网上看到了这个解决方案,但是将所有这些逻辑放在我的路线定义中并不是正确的方法。 Resolve 用于为控制器解析服务,这不是我的目标。
  • 是的,我也不会那样做。但这仍然是一种可能性;)
  • @Tonkar resolve 可以用于很多事情
  • resolve 方法的一个问题是,如果您在控制器中的任何位置调用$state.reload,解析函数将再次执行。因此,如果您在应用启动时加载一次性数据,然后因为要更新页面而重新加载状态,那么您最终将重新加载一次性数据...
  • 当您调用$state.reload 时,您可以指定您正在重新加载的状态的层次结构。然后不调用父 resolves
猜你喜欢
  • 2016-09-29
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多