itsource

비동기 콜백함수에서 값을 반환하려면 어떻게 해야 합니까?

mycopycode 2023. 1. 15. 17:22
반응형

비동기 콜백함수에서 값을 반환하려면 어떻게 해야 합니까?

이 질문은 SO로 여러 번 물어봅니다.하지만 여전히 물건을 구할 수가 없어요.

콜백에서 값을 얻고 싶습니다.상세한 것에 대하여는, 이하의 스크립트를 참조해 주세요.

function foo(address){

      // google map stuff
      geocoder.geocode( { 'address': address}, function(results, status) {
          results[0].geometry.location; // I want to return this value
      })

    }
    foo(); //result should be results[0].geometry.location; value

이 값을 반환하려고 하면 "정의되지 않은" 값이 반환됩니다.SO의 아이디어를 따랐지만 여전히 실패한다.

다음과 같은 것이 있습니다.

function foo(address){
    var returnvalue;    
    geocoder.geocode( { 'address': address}, function(results, status) {
        returnvalue = results[0].geometry.location; 
    })
    return returnvalue; 
}
foo(); //still undefined

동기 방식 내에서는 비동기 콜에서 복귀할 수 없기 때문에 이것은 불가능합니다.

이 경우 반환값을 받는 foo에게 콜백을 전달해야 합니다.

function foo(address, fn){
  geocoder.geocode( { 'address': address}, function(results, status) {
     fn(results[0].geometry.location); 
  });
}

foo("address", function(location){
  alert(location); // this is where you get the return value
});

문제는 내부 함수 호출이 비동기일 경우 응답을 '반환'하기 위해서는 이 호출을 '랩핑'하는 모든 함수도 비동기여야 한다는 것입니다.

콜백이 많은 경우 Q와 같은 약속 라이브러리를 사용하는 것을 고려해 보십시오.

콜백에서 값을 반환하는 것은 의미가 없습니다.대신 콜백 내에서 수행하는 "foo()" 작업을 수행합니다.

비동기 콜백은 이벤트가 발생할 때 브라우저 또는 Google 지오코딩 라이브러리와 같은 일부 프레임워크에 의해 호출됩니다.반환된 값은 갈 곳이 없습니다.즉, 콜백 함수는 값을 반환할 수 있지만 함수를 호출하는 코드는 반환 값에 주의를 기울이지 않습니다.

jQuery를 사용하시는 경우 http://api.jquery.com/category/deferred-object/을 참조하십시오.

Ajax 요구(또는 임의의 비동기 조작)가 완료될 때까지 콜백 기능의 실행을 연기할 수 있습니다.또한 여러 Ajax 요구가 모두 완료된 후 콜백을 호출할 때도 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function

반응형