我想知道为什么我在For
使用Angular2 (TypeScript)
循环时会出现奇怪的行为。我做了这个循环
loadAllQuestions() {
this.questionService.loadAllQuestions()
.map(res=>res.json())
.subscribe(res=>{
this.listQuestion = res.questions;
for (var q in this.listQuestion){
this.propositionService.findPropositionByQuestion(this.listQuestion[q].wordingQ)
.map(res=>res.json())
.subscribe(res=>{
console.log(this.listQuestion[q]);
});
}
});
}
因此,对于每个Question
(在listQuestion
中),我调用了一个服务,可以使用其措辞(findPropositionByQuestion
)找到此问题的所有命题(wordingQ
) ;问题是,似乎循环不起作用,在制作console.log(this.listQuestion[q])
时它只显示listQuestion
中的最后一个问题,与listQuestion中的索引数量一样多(所以如果我有3个问题,它向我显示最后一个问题3次等等。)。
有关更多说明:此处我有2个已加载的问题:
这就是console.log向我展示的内容:
请帮忙吗?
答案 0 :(得分:2)
您可以使用let
关键字设置q
变量块范围。
for (let q in this.listQuestion){ //var --> let
this.propositionService
.findPropositionByQuestion(this.listQuestion[q].wordingQ)
.map(res=>res.json())
.subscribe(res=>{
console.log(this.listQuestion[q]);
});
}
答案 1 :(得分:1)
您需要使用其他方法拆分代码:
loadAllQuestions() {
this.questionService.loadAllQuestions()
.map(res => res.json())
.subscribe(res => {
this.listQuestion = res.questions;
for (var q in this.listQuestion) {
this.findProposition(this.listQuestion[q]);
}
};
}
findProposition(question) {
this.propositionService.findPropositionByQuestion(
question.wordingQ)
.map(res => res.json())
.subscribe(res => {
console.log(question);
console.log(res);
});
}
这个问题可以帮助您理解为什么您有多次在跟踪中显示相同的元素:
答案 2 :(得分:1)
我建议您尝试for (var q of this.listQuestion){...}
而不是for (var q in this.listQuestion){...}