如何使用jQuery.当.done

Phi*_*ide 4 javascript jquery promise

我试图在另一个函数完成后运行一个函数.

 $.when(saveCanvas(canvas)).done(setWallPaper());
Run Code Online (Sandbox Code Playgroud)

每个函数都可以自行运行,但是当我运行上面的代码时,它只运行第一个函数.

我需要改变什么?

Luk*_*een 8

根据对另一个SO问题的评论,$.when期望延迟对象作为参数.如果您没有传递任何内容,将立即调用回调.

难道setWallPaper()看起来不工作,因为它实际上是被之前运行saveCancas(canvas)saveCanvas()实际上并不是一个延迟对象,它when期望它.要使其成为延迟对象,请添加dfr = $.Deferred();saveCanvas()函数的开头及其return dfr.promise();末尾.查看此SO答案以获取更多详细信息.

function saveCanvas(canvas)
{
    dfr = $.Deferred();
    //Your code
    return dfr.promise();
}
Run Code Online (Sandbox Code Playgroud)

阅读更多:http://api.jquery.com/jQuery.when/


Phi*_*ide 3

现在回过头来看,这似乎就是 jQuery 的工作方式:

function f1() {
	alert("function one");
}

$.when( f1() ).done(function() {
  alert("function 1 is done running function two");
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

注意:这与我在问题中发布的方法相同,因此本质上它应该有效。尽管 jQuery 在过去 3 年里可能发生了变化。最有可能的是调用函数的问题。