Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jQuery.When.done_Javascript_Jquery_Promise - Fatal编程技术网

Javascript 如何使用jQuery.When.done

Javascript 如何使用jQuery.When.done,javascript,jquery,promise,Javascript,Jquery,Promise,我试图在一个函数完成后运行另一个函数 $.when(saveCanvas(canvas)).done(setWallPaper()); 每个函数本身都可以正常工作,但当我运行上面的代码时,它只运行第一个函数 我需要更改什么?根据$上的一条评论。当需要延迟对象作为参数时。如果没有传递任何内容,将立即调用回调 setWallPaper()是否看起来不起作用,因为它实际上是在saveCancas(canvas)之前运行的saveCanvas()实际上不是一个,这是所期望的。要使其成为延迟对象,请添

我试图在一个函数完成后运行另一个函数

 $.when(saveCanvas(canvas)).done(setWallPaper());
每个函数本身都可以正常工作,但当我运行上面的代码时,它只运行第一个函数

我需要更改什么?

根据$上的一条评论。当需要延迟对象作为参数时。如果没有传递任何内容,将立即调用回调

setWallPaper()
是否看起来不起作用,因为它实际上是在
saveCancas(canvas)
之前运行的
saveCanvas()
实际上不是一个,这是
所期望的。要使其成为延迟对象,请添加
dfr=$.deferred()
saveCanvas()函数的开头,并
返回dfr.promise()到此结束。查看更多详细信息

function saveCanvas(canvas)
{
    dfr = $.Deferred();
    //Your code
    return dfr.promise();
}
阅读更多信息:

另一种猜测:

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

现在回顾一下,jQuery的工作原理似乎是这样的:

函数f1(){
警报(“功能一”);
}
$.when(f1()).done(function()函数){
警报(“功能1在运行功能2时完成”);
});

如果看不到实际函数的实现,很难回答,但是猜测
$.when(saveCanvas(canvas)).done(setWallPaper)你说得对,它立即运行,但传入画布似乎没有效果。@PhilipK编辑了我的答案以建议不同的解决方案记住承诺必须在某个时候得到解决,否则完成的回调将永远不会触发。这个答案对我非常有用。太多了!