angularjs – 在$routeProvider解析中返回相互依赖的异步promise

前端之家收集整理的这篇文章主要介绍了angularjs – 在$routeProvider解析中返回相互依赖的异步promise前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@ 考虑一下代码
  1. var myApp = angular.module('myApp',[]);

路线:

  1. myApp.config(['$routeProvider',function($routeProvider) {
  2. $routeProvider.when('/',{
  3. templateUrl: 'app.html',controller:myAppController,resolve:{
  4. resolveData:function(Resolver){
  5. return Resolver();
  6. }
  7. }
  8. });
  9. });

解决

  1. myApp.factory('Resolver',['$http',function($http){
  2. return function(){
  3. return $http({url: '/someurl',method: "GET"}).then(function(data) {
  4.  
  5. // dependent call 1
  6. $http({url: '/someotherurl',method: "GET" }).then(function(data) {
  7.  
  8. });
  9.  
  10. // dependent call 2
  11. $http({url: '/someanotherurl',method: "GET" }).then(function(data) {
  12.  
  13. });
  14. });
  15. }
  16. }]);

上面我在一个内嵌了2个调用,因为它们依赖于父调用返回的数据.

我想做的事情:当所有这些都完成后返回解析器而不仅仅是父调用.

我不能使用$q.all(),因为其中2个调用依赖于第一个调用.

简而言之,只有在所有3个调用完成后才能加载myAppController.

您应该使用链接承诺和$q服务来解决您的问题.使用下面的示例代码它应该工作
  1. myApp.factory('Resolver','$q',function ($http,$q) {
  2. return function () {
  3. var deferred = $q.defer();
  4.  
  5. $http({ url: '/someurl',method: "GET" }).then(function (data) {
  6. return $http({ url: '/someurl',method: "GET" })
  7. }).then(function (data) {
  8. return $http({ url: '/someanotherurl',method: "GET" })
  9. }).then(function (data) {
  10. deferred.resolve(data);
  11. });
  12. return deferred.promise;
  13.  
  14. }
  15. }]);

猜你在找的Angularjs相关文章