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