【发布时间】:2015-07-24 04:52:06
【问题描述】:
我正在尝试在下面的代码中使用 $q.all。但我认为我误解了一些关键想法,因为它没有按我预期的那样工作。如果有人能给我一些建议,将不胜感激。
问题出在$q.all(toSend.pie.slices).then():
var someData = {...};
var toSend = {
pie: {
slices: []
}
};
toSend.pie.slices = generatePieSlice(someData);
$q.all(toSend.pie.slices).then(function(data){
if(data) {
console.log(data); // this is undefined :(
//do something else
}
});
function generatePieSlice(data) {
var arr = [];
if(data) {
angular.forEach(data, function(resp_o, resp_n){
arr.push({
name: resp_o.display,
marketValue: resp_o.value,
percentage: resp_o.percentage,
key: resp_n
});
});
}
$q.all(arr).then(function(data) {
if(data) {
console.log(data); // this gives me with the correct data
return data;
}
});
}
【问题讨论】:
-
$q.all用于承诺的集合。我在您的toSend.pie.slices或arr数组中看不到任何承诺。此外,generatePieSlice不会返回任何内容 -
@Phil,感谢您的提示,理论上这对我来说很有意义,但我不太确定如何实现它。你能告诉我工作代码可能是什么吗?
-
出于某种原因,您要执行两次
$q.all()。省略第二个调用,toSend.pie.slices已经是一个promise(如果你从generatePieSlice返回),你可以直接在它上面调用.then。 -
@Bergi,但我认为最好不要直接在函数中操作全局变量?这就是我尝试通过 generatePieSlice 函数返回数组的原因。
-
@muudless:你指的是哪个全局变量?是的,你绝对应该
return来自你的generatePieSlice函数。
标签: javascript angularjs