2016-04-24 57 views
0

目前我的代码看起来是这样的:有没有一种方法可以等待angular-ui-router解决方案中的多个promise的结果?

resolve: { 
      adminTestLevel: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestLevel(); 
      }], 
      adminTestStatus: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestStatus(); 
      }], 
      adminTestType: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestType(); 
      }], 
      adminTestGradeType: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestGradeType() 
      }], 
      exams: ['testService', (tes: ITestService) => { 
       return tes.getExams(); 
      }], 
      examTypes: ['testService', (tes: ITestService) => { 
       return tes.getExamTypes(); 
      }], 
      testOrderBy: ['testService', (tes: ITestService) => { 
       return tes.getTestOrderBy(); 
      }], 
      topics: ['testService', (tes: ITestService) => { 
       return tes.getTestsTopics(); 
      }], 
     }, 

有没有我可以简化,这样我就不必有ITestService这么多的注射的方法吗?此外,我不需要有所有不同的决议,如果可能的话,我想将它们合并为一个。

回答

1

,你可以尝试使用$q.all(promises)

从文档

为($q):

$q.all(promises);
将多个承诺到时所有的输入承诺的决心,解决了单一的承诺。

因此,您可以在承诺数组中组合多个承诺并等待解决。你的代码可能看起来像:

resolve: { 
    required_data: function($q, testService) { 
     return $q.all([ 
      testService.getAdminTestLevel(), 
      testService.getAdminTestStatus(), 
      testService.getAdminTestType() 

      // and so on for all other promises 
     ]) 
    } 
} 

然后在你的控制器,也从同一文档

$q.all(promises)
返回一个承诺,将与值数组/哈希来解决,每个值对应的承诺在相同的索引/键在承诺数组/散列

您可以访问从required_data注入到您的c ontroller。
例如adminTestLevel将在required_data[0] ...等等,以相同的顺序,你已经在路由器中创建你的承诺阵列。

1

您可以使用$ q.all

resolve: { 
    myDate: function($q, tes) {  
     return $q.all([tes.getAdminTestLevel(), ... , tes.getTestsTopics()]); 
    } 
} 

myData只会在阵列中的所有承诺解决后才能解决

$q.all会给你结果的数组,你可以在你的控制器使用,你可以通过索引访问它们,所以它不太方便,然后简单的注入。