2013-03-08 3 views
1

У меня есть пример кода, который использует jQuery отложенным. То, что я не могу понять, хотя функция brushTeeth возвращает обещание, которое отвергается, почему CollectionResults, который откладывается на другой, всегда разрешается.jQuery Отложенное не отклонено

Некоторые отложенные чтения jQuery говорят, что если функции, переданные в $ .when не являются обещаниями, они будут разрешены сразу, но brushTeeth фактически возвращает обещание.

Уточняет, что я делаю неправильно здесь?

ShowerModule = (function($) { 
        function init(){ 
         var result = $.Deferred(); 
         var collectionResults = $.when(brushTeeth); 
         collectionResults.done(function(){ 
          console.log("done"); 
         }) 

         collectionResults.fail(function(){ 
          console.log("reject"); 
         }) 

        } 

        function brushTeeth() { 
         var result = $.Deferred(); 
         result.reject('["bah"]'); 
         return result.promise(); 

        } 

        return { 
         init : init 
        } 

       }(jQuery)); 
      ShowerModule.init(); 

ответ

1

Фигурные его

var collectionResults = $.when(brushTeeth); 

линия выше должен был быть

var collectionResults = $.when(brushTeeth()); 
+0

Да, и если это не упрощение чего-то более обширного, тогда '.when()' не нужно. 'brushTeeth(). done (function() {...}). fail (function() {...});' даст тот же эффект. Используйте '.when()' для ответа на комбинированное разрешение нескольких обещаний. –

+1

Да, это упрощенный пример. Я использую .when() в случае 2 или более обещаний, которые необходимо решить :) – Dhana

0

вы создали два deffered объекта с samename result

так что я думаю $ .when принимает один над ним, как обещание .. вне которой не отвергается .. попробовать этот

function init(){ 
        // var result = $.Deferred(); remove this 
        var collectionResults = $.when(brushTeeth()); //accept function and not the function's reference 
        collectionResults.done(function(){ 
         console.log("done"); 
        }) 

        collectionResults.fail(function(){ 
         console.log("reject"); 
        }) 

       } 
+0

Но каждая из этих переменных результатов будет локальной для функции, в которой она содержится. В любом случае, я редактировал код здесь, но все тот же результат http://jsbin.com/oyemez/1/ edit – Dhana

+0

ok .. ваш код дает вам все .. так как вы передаете ссылку функции, а не функцию себя ... вот jsbin http://jsbin.com/oyemez/6/edit .... попробуйте этот '$ .when (brushTeeth());' – bipen

+0

oo u уже решил это круто .. :) :) – bipen

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