我正在尝试在另一个函数完成后运行一个函数。
$.when(saveCanvas(canvas)).done(setWallPaper());
每个函数都可以自行运行,但是当我运行上面的代码时,它只运行第一个函数。
我需要改变什么?
答案 0 :(得分:8)
根据对another SO question的评论,$.when
期望将延迟对象作为参数。如果您没有传递任何内容,将立即调用回调。
setWallPaper()
似乎无法正常工作,因为它实际上是在saveCancas(canvas)
之前运行的吗? saveCanvas()
实际上不是deferred object,when
期望它是dfr = $.Deferred();
。要将其设为延迟对象,请将saveCanvas()
添加到return dfr.promise();
函数的开头,将function saveCanvas(canvas)
{
dfr = $.Deferred();
//Your code
return dfr.promise();
}
添加到其末尾。查看this SO answer了解详情。
{{1}}
答案 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;
注意:这与我在问题中发布的方法相同,所以基本上应该有效。虽然jQuery可能在过去3年中发生了变化。最有可能的是调用函数的问题。