1

我想使用 $.Deferred 对象解析和拒绝方法。我参考了以下链接

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();
}

}

在函数 a() 完全执行之后(即包含一些回调函数),所以“a”函数需要等到回调完成。所以我使用 def.reject() 和其他情况我使用 def.resolve()

但首先 def.resolve() 被调用,然后 def.reject() 被调用意味着无关紧要

函数 a() 需要等到它包含的所有回调函数完成。

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

然后我需要调用 b() 函数。所以 a() 函数完全执行,然后我需要执行 b() 函数。

如何使用延迟对象来做到这一点?

4

1 回答 1

0

你需要从你的函数中返回一个 Deferred 对象。

使用像你的例子这样的语义

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

你必须从函数返回一个Deferred对象a,像这样

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

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

        def.resolve();
    }
}

这与您所拥有的相似。

不同之处在于

  • 你返回一个新Deferred对象。您编写的a函数不返回任何内容,因此它被期望延迟的 jQuery 方法视为同步函数。
  • reject在方法完成之前,您随时都不需要这样做。你只需要在它发生时解决。关键Deferred在于您可以在传递给Deferred构造函数的方法中执行同步代码。
于 2013-05-08T05:09:32.070 回答