如何使用jQuery。当.done

时间:2013-03-24 02:39:11

标签: javascript jquery promise

我正在尝试在另一个函数完成后运行一个函数。

 $.when(saveCanvas(canvas)).done(setWallPaper());

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

我需要改变什么?

3 个答案:

答案 0 :(得分:8)

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

setWallPaper()似乎无法正常工作,因为它实际上是在saveCancas(canvas)之前运行的吗? saveCanvas()实际上不是deferred objectwhen期望它是dfr = $.Deferred();。要将其设为延迟对象,请将saveCanvas()添加到return dfr.promise();函数的开头,将function saveCanvas(canvas) { dfr = $.Deferred(); //Your code return dfr.promise(); } 添加到其末尾。查看this SO answer了解详情。

{{1}}

了解详情:http://api.jquery.com/jQuery.when/

答案 1 :(得分:1)

另一个疯狂猜测:

$.when(saveCanvas(canvas)).done(function(){
    setWallPaper()
});

答案 2 :(得分:1)

现在回过头来看,这似乎与jQuery有关:



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

$.when( f1() ).done(function() {
  alert("function 1 is done running function two");
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

注意:这与我在问题中发布的方法相同,所以基本上应该有效。虽然jQuery可能在过去3年中发生了变化。最有可能的是调用函数的问题。