Phi*_*ide 4 javascript jquery promise
我试图在另一个函数完成后运行一个函数.
$.when(saveCanvas(canvas)).done(setWallPaper());
Run Code Online (Sandbox Code Playgroud)
每个函数都可以自行运行,但是当我运行上面的代码时,它只运行第一个函数.
我需要改变什么?
根据对另一个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/
现在回过头来看,这似乎就是 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 年里可能发生了变化。最有可能的是调用函数的问题。
| 归档时间: |
|
| 查看次数: |
20587 次 |
| 最近记录: |