2013-05-08 45 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