操纵延迟运行

时间:2012-12-27 17:15:51

标签: jquery jquery-deferred

$(function(){

    var dfd = $.when( $('div').eq(0).fadeOut(1000) );

    // ADD NOW NEW FUNCTION DO dfd

    dfd.then(function(){
        alert();
    });

});

如果dfd延迟对象正在运行但是尚未解决,是否可以添加另一个函数?

3 个答案:

答案 0 :(得分:1)

有点不清楚,但我认为您要检查延迟是否已解决,如果不是,则添加另一个回调:

http://jsfiddle.net/RT23y/1/

基本上你可以检查

if (dfd.state() == 'resolved')

查看是否可以添加其他回调。

答案 1 :(得分:0)

在标准的jQuery方法链中,我们希望.fadeOut()返回jQuery,但是在表达式中...

$.when( $('div').eq(0).fadeOut(1000) )...;

...通过一个内部jQuery魔术,传递给$.when()的参数实际上是从fx $('div').eq(0)队列派生的一个承诺。要明确,我们会写......

$.when( $('div').eq(0).fadeOut(1000).promise('fx') )...;

实际上没有理由使用$.when(),除非您需要做出某些回应两个或更多承诺的事情。我们可以写下来......

var promise = $('div').eq(0).fadeOut(1000).promise();

...承诺可以通过各种方式附加任意数量的“完成”回调。

以下是可能的示例:

var promise = $('div').eq(0).fadeOut(1000).promise();

promise.then(function() {
    alert('done 1');
});

promise.done(function() {
    alert('done 2');
});

promise.then(function() {
    alert('done 3');
}).always(function() {
    alert('done 4');
});

<强> DEMO

答案 2 :(得分:-1)

您可以使用.promise()

$('div').eq(0).promise().done(function(){
    alert();
});