我对使用$ q.when有一些疑问。这是我的代码:
这是我的代码:
lru_cache()
有人可以就如何做到这一点给我一些建议吗?这是我的一个想法,但我不确定这是不是应该这样做。特别是我不确定是否需要包含resolve: {
get: ['$q','testService','$stateParams',
($q,tes,$stateParams) => {
// I am doing a check here to see if the qs
// array has been populated. If it has then
// I want to return a resolve. If not then
// I want to return getQuestions()
$q.when($stateParams.qs);
// getQuestions() will return a promise
}]
},
并且还不确定在第一个$的解析部分中我是否需要第二个$。
return
答案 0 :(得分:3)
$q.when(someVariable)
用于将数据包装在已经解析的promise中,并在返回时将其传递给promise链
解决时如此
resolve: {
get: function(response) {
return $q.when(response.data);
}
}
你需要返回承诺,否则你将破坏链条,下面的代码将无法正常运行。
你基本上将一个已解决的promise对象传递给你的控制器,所以在你的控制器中你可以把它链接到另一个then
控制器内部:
get.then(function(data) {
console.debug("this is my raw data: ", data);
}, function(rejected) {
// this won't run
}
$q docs涵盖此功能
编辑1
所以你的解析代码应该是这样的
resolve: {
get: ['$q','testService','$stateParams', ($q,tes,$stateParams) => {
return $q.when($stateParams.qs);
}]
},
并在控制器内部
get.then(() => {
return "success";
},
() => {
return getQuestions();
})
但是因为你已经返回$ q.when(总是被解析),所以行return getQuestions();
永远不会运行。所以你应该在解决方案中移除$ q.when。
编辑2
如果您希望qs之后getQuestion
解决,那么就这样做
resolve: {
get: function(response) {
return $q.when("success"); // or just return "success"
}).then(function(response) {
if (response==="success") { // you can skip it
return $q.when(getQuestions());
} else {
return $q.reject("Some error"); // a throw would work the same
}
})
}
如果你不介意订单使用$ q.all
get: function() {
return $q.all(["success", getQuestions()]).then(function(results) {
var res1 = results[0]; // success
var res2 = results[1]; // the questions
)}
答案 1 :(得分:0)
这似乎对我有用:
resolve: {
get: ['$q','testService','$stateParams',
($q,tes,$stateParams) => {
if ($stateParams.qs) {
return $q.when();
else {
return getQuestions();
}
},