有没有办法可以在angular-ui-router解决方案中等待多个承诺的结果?

时间:2016-04-24 10:32:47

标签: angularjs angular-ui-router angular-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进行如此多的注入?此外,我不需要拥有所有不同的解决方案,如果可能的话,我想将这些结合在一起。

2 个答案:

答案 0 :(得分:1)

您可以使用$ q.all

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

myData只有在数组中的所有承诺解析后才会解决

$q.all将为您提供一系列可在控制器中使用的结果,您可以通过索引访问它们,因此它不如普通注入方便。

答案 1 :(得分:1)

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

来自($q)的文档:

  

$q.all(promises);
  将多个promises组合成一个promise,在所有输入promise都被解析后解析。

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

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)
  返回一个将使用数组/值哈希值解析的单个promise,每个值对应于promises数组/ hash中相同索引/键的promise

您可以访问注入控制器的required_data的结果 例如,adminTestLevel将在required_data[0]处提供...依此类推,与您在路由器中创建承诺数组的顺序相同。