>웹 프론트엔드 >JS 튜토리얼 >jQuery를 사용하여 JavaScript에서 비동기 값을 검색하는 방법은 무엇입니까?

jQuery를 사용하여 JavaScript에서 비동기 값을 검색하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-22 07:44:02732검색

How to Retrieve Asynchronous Value in JavaScript with jQuery?

JQuery를 사용하는 JavaScript의 비동기 값 검색

JavaScript에서는 특히 반환 값을 검색하고 할당하려고 할 때 비동기 코드를 관리하는 것이 어려울 수 있습니다. . 다음 jQuery 함수를 고려해 보세요.

<code class="javascript">function trackPage(){
    var elqTracker = new jQuery.elq(459);
    elqTracker.pageTrack({
        success: function() {
            elqTracker.getGUID(function(guid) {
                alert(guid);
                var returnValue = guid;
            });
        }
    });
    return returnValue;
}

var someGuid = trackPage();</code>

alert() 함수는 GUID 값을 올바르게 표시하지만 이를 someGuid 변수에 할당하면 정의되지 않은 값이 발생합니다. 이는 jQuery getGUID() 메소드의 비동기적 특성 때문입니다.

비동기 호출의 특성

예제와 같은 비동기 호출은 GUID() 메소드와 독립적으로 실행됩니다. 주요 프로그램 흐름. getGUID() 메서드가 호출되면 즉시 실행되고 결과가 제공되기 전에 반환됩니다. 결과적으로 returnValue 변수는 정의되지 않은 상태로 할당됩니다.

대체 솔루션

이 문제를 해결하기 위해 여러 접근 방식을 사용할 수 있습니다.

1. 콜백 함수

dfsq에서 제안한 콜백 함수는 비동기 호출의 결과를 수신하는 함수를 전달하는 메커니즘을 제공합니다. 그러나 여러 개의 중첩된 콜백 함수가 필요한 경우 이 접근 방식은 복잡해질 수 있습니다.

2. jQuery $.Deferred

jQuery의 $.Deferred 객체를 사용하면 사용자 정의 비동기 논리가 약속을 반환할 수 있습니다. Promise를 사용하면 깊은 중첩 없이도 비동기 호출의 결과에 콜백을 연결할 수 있습니다. 아래의 업데이트된 코드는 이 접근 방식을 보여줍니다.

<code class="javascript">function trackPage(){
    var elqTracker = new jQuery.elq( 459 ),
        dfd = $.Deferred();

    elqTracker.pageTrack({
        success: function() {
            elqTracker.getGUID(function( guid ) {
                dfd.resolve( guid );
            });
        }
    });

    return dfd.promise();
}

// example use:
trackPage().done(function( guid ) {
    alert( "Got GUID:" + guid );
});</code>

프로미스에 콜백을 연결하면 유연성이 향상되고 코드가 더 체계화됩니다. Promise를 반환함으로써 다른 코드도 비동기 호출의 결과를 소비하고 기다릴 수 있습니다.

위 내용은 jQuery를 사용하여 JavaScript에서 비동기 값을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.