【发布时间】:2014-05-03 16:07:57
【问题描述】:
我正在使用 jquery-file-upload 插件上传多个文件,并希望将随后的所有 ajax 请求(此处未显示)添加到异步库中的队列中(主要是因为 iPhone 上的 Safari 似乎没有可以很好地处理很多请求,所以我认为一个一个地喂它们应该会更好)。因此,我定义了 fileupload 插件的 add 事件:
return $('#fileupload').fileupload({
type: 'POST',
add: function(e, data) {
q.push(data, function (err) {
if (err) {
console.log('failed processing file '+data.guid+': '+err);
return(false);
}
});
}
});
那么队列定义如下:
var q = async.queue(function (data, callback) {
var $this = $(this); // needed for triggering jquery-file-upload process event
data.process(function () {
return $this.fileupload('process', data);
}).done(function () {
return data.submit();
callback();
}, 1);
然而,当我运行这个时,我得到了错误:cannot call methods on fileupload before initialization;试图调用方法“进程”。
我想这意味着我尝试通过传递数据对象来保留文件上传的范围是不成功的。在我添加 async.queue 之前,最后一位是在 add 事件的定义中定义的,它工作正常。
我一直在尝试阅读 javascript 函数,但到目前为止我还没有弄清楚这一点。如有任何指示,我将不胜感激。
谢谢!
【问题讨论】:
-
您的异步队列是如何处理的?我看到了定义,但没有看到它被调用。
-
据我了解,一旦将任务推送到队列中,异步库就会开始处理它 (github.com/caolan/async#queue)。在项目的另一部分中,这部分实际上对我有用。
标签: javascript jquery jquery-plugins scope