我正在尝试使用docs和其他人编写的代码来解决jQuery的延迟api,但发现它非常令人困惑。我想知道如果看下面的函数,你可以解释一下
dfd.resolve有什么意义。这是否意味着fadeOut是完整的,即仅在fadeOut完成后执行?这是否将延迟对象传递给jQuery fadeOut函数?
promise.promise();退回?为什么要调用promise();在承诺财产?
请你解释一下这段代码
hide: function() {
if (this.el.is(":visible") === false) {
return null;
}
promise = $.Deferred(_.bind(function(dfd) {
this.el.fadeOut('fast', dfd.resolve)}, this));
return promise.promise();
},
答案 0 :(得分:5)
dfd.resolve
作为回调传递给fadeOut
,因此当淡出完成时,承诺将会解决。
promise = $.Deferred
具有误导性,因为$.Deferred
会返回Deferred
个对象,而非承诺。在延期时调用.promise()
将返回一个承诺。
延迟和承诺之间的区别在于,承诺仅用于注册回调(通过always
,done
,fail
,pipe
,{{1 }},或progress
),而原始延迟对象也有then
方法。
总结:resolve
与原始promise
相同,减去deferred
方法(及其相关方法)。这用于保护您的resolve
,这样您就是唯一一个能够解析/拒绝它的人。调用者可以做的就是为它添加回调函数。
promise
方法允许异步函数阻止其他代码干扰其内部请求的进度或状态。 Promise仅公开附加其他处理程序或确定状态所需的延迟方法(deferred.promise()
,then
,done
,fail
,always
,{{1 }}和pipe
),但不会改变状态(progress
,state
,resolve
,reject
,notify
和resolveWith
)。
为了简化这一点,让我们删除下划线绑定:
rejectWith