비동기 콜백 함수에서 값을 검색할 수 없습니다
일반적으로 발생하는 이 문제에는 스택 오버플로에 대한 수많은 스레드가 있습니다. 광범위한 검색에도 불구하고 일부 개발자는 여전히 콜백의 값에 액세스하는 데 어려움을 겪고 있습니다.
가장 큰 문제는 동기 메서드가 비동기 호출에서 값을 반환할 수 없다는 사실입니다. 제공된 예에 설명된 대로:
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
원하는 값을 직접 반환하려고 시도하면 "정의되지 않은" 응답이 발생합니다. 그 후 수정이 제안되었지만 소용이 없었습니다.
이러한 시도의 예:
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와 같은 Promise 라이브러리를 활용하면 수많은 콜백 처리가 단순화될 수 있습니다. 이러한 프레임워크는 비동기 작업을 관리하고 그 결과에 보다 효율적이고 구조화된 방식으로 액세스하는 편리한 수단을 제공합니다.
위 내용은 JavaScript의 비동기 콜백 함수에서 값을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!