자바 스크립트의 루프 내에서 콜백을 사용할 때 콜백에서 사용하기 위해 루프에서 업데이트 된 변수를 저장하는 방법이 있습니까?
이 질문에 이미 답변이 있습니다.
다음과 같은 것이 있다고 가정 해 봅시다.
for(var i = 0; i < length; i++){
var variable = variables[i];
otherVariable.doSomething(variable, function(err){ //callback for when doSomething ends
do something else with variable;
}
콜백이 호출 variable
될 때까지 내가 원하는대로 각 콜백마다 다른 변수가되는 대신 모든 콜백의 마지막 변수가 될 것입니다. 나는 통과 할 수 실현 variable
에 doSomething()
다음 콜백의 일환으로 그 전달 등을 얻을 수 있지만, doSomething()
외부 라이브러리의 일부이며, 그 소스 코드와 주변 혼란 오히려없는 것입니다.
내가하고 싶은 일을 할 수있는 다른 방법이 있는지 알고있는 것보다 JavaScript를 더 잘 아는 사람들이 있습니까?
감사합니다,
Sami
이 상황을 처리하는 일반적인 방법은 변수를 보유 할 범위를 만들기 위해 즉시 호출되는 다른 함수를 사용하는 것입니다.
for(var i = 0; i < length; i++) {
var variable = variables[i];
otherVariable.doSomething(function(v) { return function(err) { /* something with v */ }; }(variable));
}
즉시 호출되는 함수 내부에서 생성 및 반환되는 콜백 v
은 외부가 아닌 함수에 대한 매개 변수를 참조합니다 variable
. 이것을 훨씬 더 잘 읽으려면 콜백 생성자를 명명 된 함수로 추출하는 것이 좋습니다.
function callbackFor(v) {
return function(err) { /* something with v */ };
}
for(var i = 0; i < length; i++) {
var variable = variables[i];
otherVariable.doSomething(callbackFor(variable));
}
좋아, 나는 이것을 알아 낸 것 같았다. 내가해야 할 일은 function(var)
래퍼를 감싸는 것이 었 otherVariable.doSomething()
으므로 업데이트 된 코드는 다음과 같습니다.
for(var i = 0; i < length; i++){
var variable = variables[i];
(function(var){ //start wrapper code
otherVariable.doSomething(var, function(err){ //callback for when doSomething ends
do something else with var; //please note that i'm dealing with var here, not variable
}
})(variable);//passing in variable to var here
}
이것이 미래에 이와 같은 것에 갇힌 다른 사람에게 도움이되기를 바랍니다!
@ aparker42, 여전히 나를 혼란스럽게하기 때문에 귀하의 질문에 대한 의견에서 내 질문에 대한 귀하의 답변을 듣고 싶습니다.
편집 : 물론 이것은 자바 스크립트이기 때문에 var
변수 이름 으로 사용하고 싶지 않을 것 입니다.
'Programing' 카테고리의 다른 글
프로그래밍 관용구 란 무엇입니까? (0) | 2020.11.12 |
---|---|
HTML5 위치 정보는 어떻게 작동합니까? (0) | 2020.11.12 |
ggplot의 제어점 테두리 두께 (0) | 2020.11.12 |
Phone gap vs React Native (0) | 2020.11.12 |
북마크릿에서 외부 JS를로드 하시겠습니까? (0) | 2020.11.12 |