2013-05-08 42 views
1

我想使用$ .Deferred對象解析和拒絕方法。我所提及的功能後,下面的鏈接如何在jQuery中使用延遲解析和拒絕

http://net.tutsplus.com/tutorials/javascript-ajax/wrangle-async-tasks-with-jquery-promises/

function a() 
{ 
var def=$.deferred(); 
for(i=0; i<object.length;i++) 
{ 
if(i=="some condition") // callback function there so i reject until it completes. 
def.reject(); 
else 
def.resolve(); 
} 

} 

一個()完全執行(即其中包含了一些回調函數),因此「一」功能需要等到回調完成。所以我用def.reject()等情況下,我使用def.resolve()

但首先def.resolve()調用,然後def.reject()稱爲手段不要緊

功能a()需要等到它包含所有的回調函數完成。

$.when(a()).done(function(e) 
{ 
b(); 
}); 

然後我需要調用b()函數。所以a()函數完全執行,然後我需要執行b()函數。

我該如何使用延遲對象來做到這一點?

回答

0

您需要從您的函數返回延遲對象

要使用語義喜歡你的例子

$.when(a()).done(function(e) 
{ 
b(); 
}); 

你將不得不從函數返回a一個對象Deferred,這樣

function a() 
{ 
    return $.Deferred(function(def)) { 

     for(i=0; i<object.length;i++) 
     { 
       // do whatever 
     } 

     def.resolve(); 
    } 
} 

這與你有什麼。

的區別是

  • 返回一個新Deferred對象。你寫的a函數不會返回任何東西,所以它被jQuery方法視爲一個同步函數,期望延期。
  • 在方法完成之前的任何時候,您都不需要reject。你只需要解決它。 Deferred的全部要點是您可以在傳遞給Deferred構造函數的方法內執行同步代碼。
+0

我已經返回「defobj.promise()」最後一個函數。但我在這裏忘了帖子。我只需要一個()函數需要等到所有的回調函數完成。 – SivaRajini 2013-05-08 05:18:53

+0

@SivaRajini,如果你通過自己迭代的對象使用異步回調,那麼你將需要一個不同的方法。這聽起來像你可能根本不需要'a'函數,但是像'$ .when.apply'這樣的函數可以等待一系列延遲對象的完成。更具體地說,我需要看看循環中的代碼是什麼樣的。 – harpo 2013-05-08 06:13:19

+0

我試過你的代碼,但它在() – SivaRajini 2013-05-08 06:15:41