복붙노트

[JQUERY] 자바 스크립트 비동기 반환 값 / jQuery로 지정 [중복]

JQUERY

자바 스크립트 비동기 반환 값 / jQuery로 지정 [중복]

해결법


  1. 1.그래서,이 질문은 이상 만 시간을 요구하고 있으며, 나는 모든 사람이 (자신을 포함) 한 번이 시도하는 것이입니다.

    그래서,이 질문은 이상 만 시간을 요구하고 있으며, 나는 모든 사람이 (자신을 포함) 한 번이 시도하는 것이입니다.

    그냥 비동기 호출의 성격, 당신은 반환 값으로 결과를 사용할 수 있습니다. 그들은 당신이 호출의 결과를 유도 할 수있는 기능을 전달 왜 그게 전부는, 그들 중 하나를 반환 할 수 없습니다! 또한 elqTracker.pageTrack () 함수 호출이 반환은 즉시 따라서 귀하의 ReturnValue를 간단하게 정의되어 있지 않습니다 것을 알 수 있습니다.

    대부분의 사람들은 (dfsq의 답변을 참조) paramater로 콜백 함수를 도입하여이 문제를 해결한다. 이 방법을 시도하고, 사실입니다 -하지만 jQuery를은 $ .Deferred가 있습니다. 이것은 당신이 당신의 자신의 비동기 로직 당신이 다음에 콜백의 수를 첨부 할 수 있습니다 약속을 반환 할 수 있습니다 :

    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 );
    });
    

    공지 사항 이제 trackPage ()는 당신이 콜백을 첨부 할 수있는 객체를 반환? 즉시 중 하나에 첨부 할 필요가 없습니다.

    var pageHit = trackPage().done(function( guid ) {
        alert( "Page Hit GUID:" +guid );
    });
    
    $("button").click(function() {
        pageHit.done( function( guid ) {
            alert( "Clicked on Page GUID:" + guid );
        });
    });
    

    당신이 당신의 자신의 논리 반환 약속을하면 모든 AJAX 물건에 대한 인터페이스가 매우 유사해야하므로 또한, jQuery를 AJAX 모듈은 항상 아니라 약속을 반환합니다.

    보조 노트로 : 당신의 VAR에 ReturnValue 어쨌든 잘못 "범위"있다는 점을 지적하고 싶습니다. 그것은 trackPage 함수의 외부 범위에 선언 할 필요가 있었다. 심지어이 수정과 함께, 개념은 여전히 ​​작동하지 않습니다.


  2. 2.비동기 호출하면 코드가 작동하지 않을 쓰기를 시도하는 방법이 있기 때문에 (때문에 반환에 ReturnValue의 순간으로하며 trackCode 반환 값에 아직 정의되지 않은). 대신 당신은 trackPage에 콜백을 전달해야합니다 :

    비동기 호출하면 코드가 작동하지 않을 쓰기를 시도하는 방법이 있기 때문에 (때문에 반환에 ReturnValue의 순간으로하며 trackCode 반환 값에 아직 정의되지 않은). 대신 당신은 trackPage에 콜백을 전달해야합니다 :

    function trackPage(callback) {
        var elqTracker = new jQuery.elq(459);
        elqTracker.pageTrack({
            success: function() {
                elqTracker.getGUID(function(guid) {
                    alert(guid);
                    // Instead of this: var returnValue = guid;
                    // You should use your callback function
                    callback(guid);
                });
            }
        });
        return returnValue;
    }
    
    trackCode(function(guid) {
        // perform some actions with guid
    });
    
  3. from https://stackoverflow.com/questions/7779697/javascript-asynchronous-return-value-assignment-with-jquery by cc-by-sa and MIT license