2015-06-30 1 views
0

Этот fiddle показывает мой код. У меня есть три функции. functionB возвращает пользовательский ввод. Время, необходимое пользователю для ввода, неизвестно. Проблема в том, что функция не дожидается и не срабатываетJQuery Deferred/variable выполняется немедленно

$.when(def1).done(functionC); 

немедленно. Он должен подождать, пока функция Б не ответит, независимо от того, сколько времени потребуется. Поэтому должен быть предупрежден «Пользовательский ввод», а не «неопределенный». Как это можно сделать? Благодарю.

ответ

2

Вы не вернете дефферируемый объект должным образом. Вы должны вернуть отложенный объект для работы в функции when() и разрешить его через несколько секунд.

function functionB() { 
    var deferred = $.Deferred(); 
    setTimeout(function() { 
     deferred.resolveWith(this, ["User Input"]); 
    }, 5000); 
    return deferred; 
} 

https://jsfiddle.net/4DAfn/295/

+0

Великие события часто происходят из маленьких причин. Большое спасибо. – ReyamOki