for(var i=0;i<5;i++)
{
function asd(i) {
console.log(i+3);
}
}
을 하면 분명 3 4 5 6 7 이 나와야 하지만
7 7 7 7 7이 나온다.
정말 골치아픈 문제였다.
분명 작동은 하는데 반복문 안의 함수가 맨 마지막 i값으로만 처리가 되버린다.
처음에는 어이가 없었음.
아마도 meanstack의 동기처리 때문에 그런듯 하다. (동기처리가 정말 밉더라)
http://apple77y.tistory.com/11
해결법으로는 3가지를 찾았음.
1. 반복문 안의 함수를 반복문 밖에서 선언한뒤에 parameter를 사용하여 정상적으로 수행.
근데 내가 만든 기능이 find안에 find를 또쓰는거라서 너무 복잡해버리게되어서 2번으로 해본뒤에 2번으로 쓰기로함.
function asd(num) {
return (num+3);
}
이런식으로 만든뒤에
for(var i=0;i<5;i++)
{
asd(i);
}
대충 이런식?
2. With ({ n : i }) { ... }를 이용하여 정상적으로 수행.
function test() {
for (var i = 0; i < 5; i++) {
with ({ n: i }) {
function asd() {
console.log(n+3);
}
}
}
}
.이런느낌? 개인적으로 2번보다 깔쌈한것같음.
3. Promise 기능을 사용하여 수행.
먼가 고급스러운 해결방법같지만 너무 어려워보여서 싫었음.
http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue
'JS > Angularjs' 카테고리의 다른 글
Meanstack - html의 버튼 누르면 db안의 데이터 변동한 후 가져오기 (0) | 2016.06.25 |
---|---|
meanstack - 잘 설치되어있는지 확인하기 (0) | 2016.06.23 |
AngularJs - textarea ng-model 설정하고나면 공백일때 (0) | 2016.06.23 |
AngularJs - angular is not defined (0) | 2016.06.23 |
AngularJS - Directives (0) | 2016.06.23 |