【问题标题】:$.when().done() Jquery functions execution flow not working$.when().done() Jquery 函数执行流程不起作用
【发布时间】:2016-04-20 17:38:26
【问题描述】:

我在 $.when(f1,f2) 中调用了两个函数,但在解析 f2 之前调用了 done()。但是如果我将 alert() 语句放在 done 中,它工作正常。

function f1(){
var d= new $.Deferred();
 .......code......
 d.resolve();
 return d.promise();
}
function f2(){
var d= new $.Deferred();
 .......code......
 d.resolve();
 return d.promise();
}
function f3()
{.....code.....    }

 $.when(f1().f2()).done(f3());

上面的代码甚至在 f2() 被解析之前就调用了 f3。但是如果我把 alert 语句放在 done() 里面就可以了。

 $.when(f1().f2()).done( alert ("came here");f3());

这是按正确的顺序执行的。

$.when(f1,f2).then() 也一样。谁能告诉我这种不寻常行为的原因是什么。

【问题讨论】:

    标签: jquery-deferred .when


    【解决方案1】:

    正确的语法,

    $.when() 方法promise's.in 你的代码我可以看到$.when() 方法中两个函数调用之间的点而不是逗号。

    正确的语法是

    $.when(f1(), f2()).then()  
    

    $.when(f1(), f2()).done()
    

    【讨论】:

    • 感谢@sundar 在这里问我打错的问题,但在我的代码中我只使用“,”-- $.when(f1(),f2()).done();
    • @N.Moudgil 不可能发生那样的事情。你怎么说 done() 在 f2() 之前调用?
    • 从您的代码中,我可以看到,在从 f1() 和 f2() 返回之前,您正在解决所有的承诺(f1 和 f2 方法中的承诺)。请添加 console.log三种方法 f1、f2 和 done.check 流程
    • 如果您想为您的问题提供适当的答案,请发布您正在使用的确切代码。如果您发布的代码没有任何拼写错误,我们只能给您正确的答案。我们怎么知道这是一个拼写错误或者那是影响您的代码的实际错误。
    • thnx @sundar ..我正在使用 phonegap 在 iOS 8 iph 5s 中进行测试并面临这个问题。在 android nexus 6(lollipop) 中进行测试时,我得到了不同的执行流程。
    【解决方案2】:

    .done() 需要像这样传递一个函数引用:

     $.when(f1(),f2()).done(f3);
    

    $.when() 的两个参数之间还需要一个逗号(不是句点),但我认为这只是您问题中的一个错字。

    当您执行$.when(f1(),f2()).done(f3()); 时,在f3 之后使用括号,它会立即执行f3(),然后将其返回值传递给.done(),这可能不是您想要的。

    【讨论】:

    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    相关资源
    最近更新 更多