2017-01-23 4 views
0

다른 함수가 반환 될 때까지 특정 함수가 실행되지 않도록 약속을 사용하려고합니다. 나는 많은 예제와 다른 문제 등을 살펴 봤는데 구문이 정확하다고 말할 수있는 한 내 .then(function())은 실행되지 않으므로 뭔가 빠져 있어야합니다.jQuery Promise가 .then() 또는 .done()을 트리거하지 않습니다.

function previewMaster() { 

var dfd = $.Deferred(); 

    function prevAndTest() { 
    return true; 
    } 

    var doneYet = false; 

    var intvl = setInterval(function() { 
    if (doneYet === false) { 
     doneYet = prevAndTest(); 
     //reassign doneYet until true 
    } else { 
     clearInterval(intvl); 
     dfd.resolve; 
    return dfd.promise(); 
    } 
    }, 1000); 
} 

.then()도 여기 .done() 일 :

var promise = previewMaster(); 
    promise.then(function() { 
    alert("finished"); 
    }); 
방법 previewMaster이 약속 반환하지 않습니다 때문에
+2

'dfd.resolve을,'함수 ("값이 그 약속이 무엇 때문에 약속을 해결하기 위해") dfd.resolve'사용 ...이다; 당신은'dfd.promise을 반환하는 경우' –

+0

또한,()'완전히 잘못이다 - 당신은 previewMaster 함수에서 반환 할 필요는 setInterval을 –

+0

@JaromandaX에없는 콜백 절대적으로 올바른 것입니다. Docs : https://api.jquery.com/deferred.resolve/ – YellowShark

답변

2

당신이 솔루션은 작동하지 않습니다 :

function previewMaster() { 
    ... 
    return dfd.promise(); 
} 

와 당신은 전화를해야하기 때문에 약속을 해결하려는 경우 resolve 기능 :

dfd.resolve(); 

여기에 전체 예를 참조하십시오 :

function previewMaster() { 

    var dfd = $.Deferred(); 

    function prevAndTest() { 
     return true; 
    } 

    var doneYet = false; 

    var intvl = setInterval(function() { 
     if (doneYet === false) { 
     doneYet = prevAndTest(); 
     //reassign doneYet until true 
     } else { 
     clearInterval(intvl); 
     dfd.resolve(); // <- resolve method must be called to resolve the promise. 
     // return dfd.promise(); // <- Do not return the promise here 
     } 
    }, 1000); 
    return dfd.promise(); // <- Return the promise here 
}