$ .when()。done()Jquery函数执行流程不起作用

时间:2016-01-15 07:00:38

标签: jquery-deferred .when

我在$ .when(f1,f2)中调用两个函数,但在解析f2之前调用done()。但是如果我把alert()声明放在完成它工作正常。

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()相同。任何人都可以告诉我这种不寻常行为的原因是什么。

2 个答案:

答案 0 :(得分:1)

.done()需要传递一个函数引用,如下所示:

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

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

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

答案 1 :(得分:-1)

正确的语法,

在您的代码中提供$.when()方法承诺我可以在$.when()方法中的两个函数调用之间看到点而不是逗号。

正确的语法是

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

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