这是我的代码:
resolve: {
get: ['setTest', 'questionService', 'testService', '$stateParams',
(setTest, qus: IQuestionService, tes: ITestService, $stateParams) => {
if (tes.qs) {
qus.mapUserTestQuestions(tes.qs);
return true;
} else {
var userTestId = parseInt($stateParams.testId.substring(6, 11));
return qus.getUserTestQuestions(userTestId);
}
}]
},
问题是我收到一条消息说"没有通用返回类型",我想这是因为 if 的一部分返回 true,另一部分返回承诺。
应该有比同步返回布尔值与承诺某些问题更好的解决方案。这也会导致控制器上出现一些可能可以避免的决策逻辑。
似乎在第一种情况下,您已经拥有所需的数据,不需要执行任何异步调用。那么,为什么不通过承诺(假设mapUserTestQuestions
和getUserTestQuestions
的结果属于同一类型)返回此(同步)转换的数据。如果是这样,只需使用 $q 服务包装结果,如下所示:
return $q.when(qus.mapUserTestQuestions(tes.qs));
通过这种方式,您可以以相同的方式访问数据,无论它是否已经存在或您需要执行一些异步调用。有关$q请参阅:https://docs.angularjs.org/api/ng/service/$q#when
TypeScript 1.4 添加了联合类型,它允许使用类型列表注释变量:
let myVar: boolean|string;
// both of these are valid assignments
myVar = true;
myVar = 'hello world';
您还可以将其应用于函数的返回类型,如下所示:
resolve: {
get: ['setTest', 'questionService', 'testService', '$stateParams',
(setTest, qus: IQuestionService, tes: ITestService, $stateParams): boolean|Promise => {
if (tes.qs) {
qus.mapUserTestQuestions(tes.qs);
return true;
} else {
var userTestId = parseInt($stateParams.testId.substring(6, 11));
return qus.getUserTestQuestions(userTestId);
}
}]
},
请注意匿名函数返回类型上的boolean|Promise
类型注释。