Programing

자바 스크립트의 루프 내에서 콜백을 사용할 때 콜백에서 사용하기 위해 루프에서 업데이트 된 변수를 저장하는 방법이 있습니까?

crosscheck 2020. 11. 12. 07:56
반응형

자바 스크립트의 루프 내에서 콜백을 사용할 때 콜백에서 사용하기 위해 루프에서 업데이트 된 변수를 저장하는 방법이 있습니까?


이 질문에 이미 답변이 있습니다.

다음과 같은 것이 있다고 가정 해 봅시다.

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될 때까지 내가 원하는대로 각 콜백마다 다른 변수가되는 대신 모든 콜백의 마지막 변수가 될 것입니다. 나는 통과 할 수 실현 variabledoSomething()다음 콜백의 일환으로 그 전달 등을 얻을 수 있지만, 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변수 이름 으로 사용하고 싶지 않을 것 입니다.

참고 URL : https://stackoverflow.com/questions/7053965/when-using-callbacks-inside-a-loop-in-javascript-is-there-any-way-to-save-a-var

반응형