7

我正在尝试在另一个功能完成后运行一个功能。

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

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

我需要改变什么?

4

3 回答 3

9

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

似乎没有setWallPaper()工作,因为它实际上之前正在运行saveCancas(canvas)saveCanvas()实际上不是延迟对象,它when期望它是。要使其成为延迟对象,请添加dfr = $.Deferred();saveCanvas()函数的开头和return dfr.promise();结尾。查看此 SO 答案以获取更多详细信息。

function saveCanvas(canvas)
{
    dfr = $.Deferred();
    //Your code
    return dfr.promise();
}

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

于 2013-03-24T02:46:20.843 回答
2

现在回想起来,这似乎是它与 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>

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

于 2016-10-28T21:02:12.267 回答
1

另一个疯狂的猜测:

$.when(saveCanvas(canvas)).done(function(){
    setWallPaper()
});
于 2013-09-30T06:52:33.943 回答