2017-08-01 52 views
0

我已经使用ngResource作为依赖从一个后端获取数据的工厂中构建了我的AngularJs应用程序。这个工厂被注入到一个服务中,最后这个服务被注入到一个控制器中。AngularJs使用ngResource从控制器解析服务

问题是,由于我的后端调用需要一些时间,所以结果不会反映在控制器中。我确实管理了服务中的承诺,因为我能够在控制台中打印它,所以它会在一段时间后返回结果,并且我真的想要避免在控制器中处理此承诺,并且现在也使用$ q用法不赞成使用,所以我想知道是否有更多的解决方案更像Angular(2/4),AngularJs存在解决这个问题。

谢谢

+0

当您询问有关由您的代码引起的问题的问题时,如果您提供可用于重现问题的代码,您将得到更好的答案。请参见[如何创建最小,完整和可验证的示例](https://stackoverflow.com/help/mcve)。 – georgeawg

+0

Angular 2+使用[ES6承诺](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)。 AngularJS使用[$ q服务承诺](https://docs.angularjs.org/api/ng/service/$q#the-promise-api),它们与AngularJS框架及其摘要循环集成在一起。只有在AngularJS执行上下文中应用的操作才能从AngularJS数据绑定,异常处理,属性监视等中受益。我很抱歉,您不喜欢承诺,但它们是任一框架的现实。 – georgeawg

回答

1

我看不到其他的方式来使用承诺(与angularjs $ Q),因为它是在AngularJS的核心。

我发现该文档对此有足够的了解:ngResource。然而,ngResource$http的包装,它给你一个承诺。另一方面,ngResource为您提供了一种简单的方法,可以通过回调快捷方式绕过此步骤。

如果你想在angularjs中使用一个奇特的解决方案,你应该停止使用$ resource/$ http,并且看看fetchasync await的概念。

其他解决方案存在,但它是一些非常老派的方法来阻止你的主线程。

注:我很好奇$q的弃用和Angular引用的奇特方式。

+1

提取API和异步/等待结构都使用未与AngularJS框架集成的ES6承诺。另一方面,$ q服务承诺与AngularJS框架集成。只有在AngularJS执行上下文中应用的操作才能受益于AngularJS数据绑定,异常处理,属性监视等。 – georgeawg

+0

现在它为什么重写了整个框架,我也为工厂达到了其他限制基于ngResource。非常感谢你的答案 – Habchi

相关问题