这是我的代码:
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,另一部分返回 promise 。
最佳答案
在大多数情况下,应该有比同步返回 bool 值与 promise 某些问题更好的解决方案。这也会导致 Controller 上出现更多可能可以避免的决策逻辑。
看来在第一种情况下,您已经拥有所需的数据,并且不需要执行任何异步调用。那么为什么不通过 Promise 返回这个(同步)转换后的数据(假设 mapUserTestQuestions
和 getUserTestQuestions
的结果是相同的类型。如果是这样,只需使用$q 服务如下所示:
return $q.when(qus.mapUserTestQuestions(tes.qs));
这样您就可以以相同的方式访问数据,无论数据是否已经存在或者您需要执行一些异步调用。对于 $q 请参阅:https://docs.angularjs.org/api/ng/service/ $q#when
关于javascript - 如果 ui-router 解析的一部分返回 true 或 promise ,我该如何编写代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35730322/