【问题标题】:jQuery Deferred resolve() don't workjQuery延迟解析()不起作用
【发布时间】:2011-02-12 19:59:16
【问题描述】:

我做错了什么?

function test() 
{
    var d = $.Deferred();
    var name=prompt("Please enter your name","Harry Potter");
    if (name=="aa") 
        d.resolve(); 
    else
        setTimeout(test, 1000);

    return d.promise();
}
test().done(function() { alert("It's Ok!"); });

【问题讨论】:

  • 它确实工作得很好。 jsfiddle.net/MQsbS/1 确保您至少使用 jQuery 1.5.0。
  • 是的,只有在第一次输入“aa”时才有效..

标签: jquery jquery-deferred


【解决方案1】:

它在第二个名称输入上不起作用的原因是,您正在调用一个函数 test(),返回 deferred object,然后添加您对 test() 的原始调用的能力,允许访问回调方法,如.then().fail().done()

但是,如果您没有得到您想要的输入,您将再次调用函数test(),这会创建一个NEW deferred object。因此,您添加了done() 回调的对test() 的原始调用将永远不会收到回调。

改成:

var d = $.Deferred();

function test() 
{
    var name=prompt("Please enter your name","Harry Potter");
    if (name=="aa") 
        d.resolve();
    else
        setTimeout(test, 1000);
    return d.promise();
}

test().done(function() { alert("It's Ok!"); });

这是您在引用 SAME deferred object 而不是在每次函数 test() 运行时都创建一个新的。

看到它工作了here

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多