需要FineUploader方法uploadStoredFiles才能在继续之前完成

对于一些快速背景,uploadStoredFiles()是FineUploader插件中用于异步将附加文件数据发送到服务器路径的方法。 我也在为我的应用程序使用AngularJS。 我的问题实际上与这里发现的问题非常相似……

jQuery:等待函数完成继续处理?

…最大的区别是我无法访问回调函数本身。 此外,我的脚本运行FineUploader作为一个更大的表单的一部分,其中附件是可选的,所以使用FineUploader’完成’回调也没有多大帮助。

这是一个代码示例。 基本上,如果没有附件,那么页面应该重新加载。 如果有附件,则应上传,然后重新加载页面。

if(hasAttachments) { myuploader.uploadStoredFiles(); } //AngularJS call to refresh page $route.reload(); 

大多数情况下,页面会刷新自身并且文件在其列表中丢失,直到我稍后再进行额外刷新。 我可以硬编码等待时间,但有些事情看起来效率低下且很邪恶。

欢迎任何建议或解决方案。 我特别喜欢Angular-ish解决方案,但我会采取我能得到的。

我试图将我的评论总结为一个有凝聚力的答案:

Fine Uploader具有在发生某些事情时运行代码的事件,例如文件提交到上传者( onSubmit )或文件上传时( onComplete )。

vanilla JavaScript看起来像,

 $(document).ready(function() { $("#triggerUpload").click(function () { $("#manual-fine-uploader").fineUploader('uploadStoredFiles'); }); function submitForm () { if ($(this).fineUploader('getInProgress') == 0) { var failedUploads = $(this).fineUploader('getUploads', { status: qq.status.UPLOAD_FAILED }); if (failedUploads.length == 0) { // do any other form processing here $("#uploader").submit(); } } }; // Instantiate a Fine Uploader instance: $("#manual-fine-uploader").fineUploader({ autoUpload: false, request: { endpoint: "/uploads_bucket" } }).on("complete", function (event, id, name, response) { submitForm.call(this); }).on('statusChange', function (event, id, oldStatus, newStatus) { if (newStatus === qq.status.CANCELLED) { submitForm.call(this); } }); }); 

您可以使用此Angluar示例作为制作Fine Uploader指令的起点。