2017-01-23 23 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"); 
    }); 
+2

'dfd.resolve;' функция ... использовать 'dfd.resolve ("значение для разрешения обещания, потому что это то, что делает обещание"); ' –

+0

также, где вы возвращаете' dfd.promise() 'совершенно неправильно - вам нужно вернуть его из функции previewMaster, а не обратный вызов setInterval –

+0

@JaromandaX абсолютно прав. Документы: https://api.jquery.com/deferred.resolve/ – YellowShark

ответ

2

Вы решение не работает, так как метод previewMaster не возвращается обещание:

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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^