我正在尝试在另一个功能完成后运行一个功能。
$.when(saveCanvas(canvas)).done(setWallPaper());
每个函数都可以正常工作,但是当我运行上面的代码时,它只运行第一个函数。
我需要改变什么?
我正在尝试在另一个功能完成后运行一个功能。
$.when(saveCanvas(canvas)).done(setWallPaper());
每个函数都可以正常工作,但是当我运行上面的代码时,它只运行第一个函数。
我需要改变什么?
根据对另一个 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();
}
现在回想起来,这似乎是它与 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 年中可能发生了变化。很可能是调用函数的问题。
另一个疯狂的猜测:
$.when(saveCanvas(canvas)).done(function(){
setWallPaper()
});