在一段真实代码中延迟
Deferreds in a piece of real code
我对延迟和它们的作用有一些了解,但我无法理解它们在我现在正在使用的代码中的用法。这段代码来自jquery-file-upload插件和文件jquery-fileupload-ui.js:
stop: function (e) {
var that = $(this).data('blueimp-fileupload') ||
$(this).data('fileupload'),
deferred = that._addFinishedDeferreds();
$.when.apply($, that._getFinishedDeferreds())
.done(function () {
that._trigger('stopped', e);
});
that._transition($(this).find('.fileupload-progress')).done(
function () {
$(this).find('.progress')
.attr('aria-valuenow', '0')
.children().first().css('width', '0%');
$(this).find('.progress-extended').html(' ');
deferred.resolve();
}
);
},
_addFinishedDeferreds: function (deferred) {
if (!deferred) {
deferred = $.Deferred();
}
this._finishedUploads.push(deferred);
return deferred;
},
_getFinishedDeferreds: function () {
return this._finishedUploads;
},
在 stop 方法中,有两个我不明白的结构:
1(
$.when.apply($, that._getFinishedDeferreds())
.done(function () {
that._trigger('stopped', e);
});
2(
deferred = that._addFinishedDeferreds();
//and later in the _transition function
deferred.resolve();
第二个构造在整个代码中重复。我可以看到_addFinishedDeferreds创建了一个延迟(如果它没有作为参数传递(,将其添加到_finishedUploads并且延迟稍后得到解决。但我错过了这一切的意义。它有什么好处?为什么没有它代码就无法工作?而且我完全不明白第一个构造的含义。任何人都可以对此有所了解吗?
首先我假设你了解Deferreds
的基本用法,包括resolve()
和$.when()
。
根据我对这个代码片段的理解,每次创建新Deferred
时,都会多次调用 stop
函数,并且在转换完成之前不会解析,尽管我不知道它是什么转换,因为您没有向我们展示它的代码。这里的Deferred
对象是发出转换完成的信号,然后触发stopped
事件。
详
1(
$.when.apply($, that._getFinishedDeferreds())
.done(function () {
that._trigger('stopped', e);
});
$.when.apply($, that._getFinishedDeferreds())
生成一个新Deferred
,在 _getFinishedDeferreds()
返回的数组中解析每个Deferred
后,将解析该。然后,done()
中的回调函数触发stopped
事件。
2(
deferred = that._addFinishedDeferreds();
//and later in the _transition function
deferred.resolve();
你的理解是正确的。这段代码(如果我猜对的话(的目的是确保在所有转换完成之前不会触发事件。
但是,如果是这样,则存在事件触发回调的错误:
function () {
that._trigger('stopped', e);
}
每次调用 stop()
时附加,因此可以多次触发事件。
- 从桌面读取python文件时高亮显示代码
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 货币代码为欧元-金额的格式不应包含小数
- Regex代码只允许一个空格
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 从var向代码隐藏函数传递值
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 代码不会验证
- 如何从rails中的代码中删除新行( )
- Angularjs代码未在匿名函数中运行
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 将 jQuery 代码添加到 Index.aspx 页面
- 为什么忽略了eval()代码中的语法错误
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- 在一段真实代码中延迟
- 地理图表:使用 ISO 3266-2 区域代码,但显示真实姓名