在angular中,我们有一个rich方法,它运行一些rest函数来丰富数据对象,然后设置一个变量,这将导致隐藏的详细信息选项卡可见。像这样过于简化的例子:
$scope.enrich = function(team){
angular.forEach(team.members, function(member){
member.getSkills().then(function(skills){
member.skills=skills;
}
});
$scope.enrichFinished=true;
};
我在详细信息窗格中遇到异常,当enrichFinished为true时打开。例外似乎是由于过滤器试图过滤member.skill并发现该成员的技能未定义。我假设问题是我们在设置enrichFinished后立即打开详细信息选项卡,这是在设置member.skills = skill;的then子句之前。因此,我们有一个datarace,在我们尝试过滤技能时,可能还没有设置技能。
在我实际生成并保存我需要的数据之前,告诉角度等待在详细信息选项卡中运行过滤器的最简洁方法是什么?实际的富集方法在for循环中丰富了3-4个不同的变量。
答案 0 :(得分:0)
您可以在所有承诺解决后设置$scope.enrichFinished=true;
,以便您可以像这样使用$q.all
$scope.enrich = function(team){
$q.all(team.members.map(
function(member){
return member.getSkills().then(
function(skills){
member.skills=skills;
}
);
}
)
).then(function(){
$scope.enrichFinished=true;
});
};