Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 解决并问.All()问题_Angularjs_Angular Ui Router_Angular Promise - Fatal编程技术网

Angularjs 解决并问.All()问题

Angularjs 解决并问.All()问题,angularjs,angular-ui-router,angular-promise,Angularjs,Angular Ui Router,Angular Promise,我正在尝试使用ui路由器 $stateProvider .state('abc', { url: 'xyz', templateUrl: 'templateURL', controller: ctrl, resolve:{ data: function(someService){ data = someServic

我正在尝试使用
ui路由器

$stateProvider
        .state('abc', {
            url: 'xyz',
            templateUrl: 'templateURL',
            controller: ctrl,
            resolve:{
                data: function(someService){
                    data = someService.init();
                    return data;
                }
            }
        })
我的服务代码是这样的

var someObject = {
  data1: ...,
  data2: ....,
  ...
}
return{
   init: function(){
   promise1 = ...
   promise2 = ...
   promise3 = $http.get('someurl').then(function(){
   ...
   ...
   //do some manipulation with someObj
   return someObject;
   });
   $q.all(promise1 , promise2 ).then(promise3);
   }
}
当我调试代码时,它将到达第行
returnsomeobject
,但随后它没有解析

我做错了什么?

您必须将回调函数传递给
。然后(…)
。您的
承诺3
为无

我怀疑你想这么做

return $q.all([promise1, promise2, promise3]) 

如果希望
promise3
仅在
promise1
promise2
之后执行,请尝试

return $q.all([promise1, promise2])
    .then(function(arrayOfData) {
        return promise3;
    });
下面是一个例子来说明这一区别:

    var promise1 = $timeout(function() {
        return 'promise1Data';
    }, 1000); 
    var promise2 = $timeout(function() {
        return 'promise2Data';
    }, 2000);
    var promise3 = $timeout(function() {
        return 'promise3Data';
    }, 5000);

    // This is what you're essentially doing when your route resolves
    $q.all([promise1, promise2])
        .then(promise3)
        .then(function(data) {
            console.log(data); // You get ["promise1Data", "promise2Data"]
        });

    // This is what I think you want
    $q.all([promise1, promise2])
        .then(function(arrayOfResolvedData) {
            return promise3;
        })
        .then(function(data) {
            console.log(data); // You get promise3Data
        });

当然,您并没有从init函数返回承诺,那个么为什么要等待呢。它将立即解决我应该返回q吗?只要做
返回$q.all([promise1,promise2]),然后(promise3)和resolve just
return someService.init()
基本上所有3个承诺都应该得到解决,并且在我继续使用routePromise之前应该填充someObject。promise 3与承诺1和承诺2一样,返回$q。所有人([promise1,promise2,promise3])对不起我的错误。。。我做错了什么。。你的解决方案很好用。Thanks@AbhijithNagaraja:也许其中一个拒绝了?还是一个永远等待?