大佬教程收集整理的这篇文章主要介绍了我如何使用jQuery.Deferred对象等待异步函数调用完成?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
据我所知,我可能错了,但似乎调用uploader.start()是一个异步函数调用.因此,目前,上传将开始,表单将在文件上传之前提交.问题是我无法控制这个函数调用.
我最近读到了关于new release of jQuery 1.5和新Deferred Object的内容,看起来这有可能帮我解决这个问题.有没有办法等待异步函数调用完成其工作,然后在调用后继续执行代码.所以我正在寻找类似下面的伪代码…
var uploader = $('#plupload_container').pluploadQueue(); $('#submitButton').click(function() { // if there are files to be uploaded,do it if (uploader.files.length > 0) { // make the call and wait for the uploader to finish uploader.start(); while ( the uploading is not done ) { wait for the uploader to finish } // conTinue with submission } });
有没有办法“等待”uploader.start()完成,基本上在click事件处理程序上暂停,以便可以先上载所有文件,然后其余的click事件处理程序可以完成执行?我尝试了以下内容,但在文件上传之前打印了“完成”…
$.when(uploader.start()).then(function () { console.log("done") });
另一个有用的信息…我可以将某些事件绑定到此上传器对象实例,例如“UploadProgress”或“UploadComplete”.例如,我可以以某种方式使用延迟对象来捕获“UploadComplete”事件触发的时间吗?是否有AJAX-y方式来做到这一点?
谢谢.
/** * Starts uploading the queued files. * * @method start */ start : function() { if (this.state != plupload.STARTED) { this.state = plupload.STARTED; this.trigger("StateChanged"); uploadNext.call(this); } },
所以它不会返回延迟对象.而不是在uploadNext函数中有这行代码:
this.trigger(“UploadComplete”,文件);
uploader.bind("UploadComplete",function(files) { // your code });
我从来没有使用过这个插件,但这个should工作了.祝好运.
如果你必须使用延迟,那么你总是可以像这样的伪代码:
var uploader = $('#plupload_container').pluploadQueue(); var def = $.Deferred(); uploader.bind("UploadComplete",function(files) { def.resolve(files); }); $('#submitButton').click(function() { if (uploader.files.length > 0) { uploader.start(); def.done(function(files) { def = $.Deferred(); // reset the deferred object. // rest of your click handler. }); } });
以上是大佬教程为你收集整理的我如何使用jQuery.Deferred对象等待异步函数调用完成?全部内容,希望文章能够帮你解决我如何使用jQuery.Deferred对象等待异步函数调用完成?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。