0

jQuery の Deferred で always() を起動するのに問題があります。done() と fail() は正常に動作しますが、always() が起動しないため、何か間違ったことをしているに違いありません。

$. when it works...

var Validator = {
    validate_something: function(value) {
        var deferred = new $.Deferred();

        deferred.resolve();

        return deferred.promise();
    },

    validate_date: function(value) {
        var deferred = new $.Deferred();

        deferred.resolve();

        return deferred.promise();
    }
};


function doneCallback() {
    console.log("$.then.done() executed");
}

function failCallback() {
    console.log("$.then.fail() executed");
}

function alwaysCallback() {
    console.log("$.then.always() executed");
}

var validationPromise = $.when(
    Validator.validate_date(6).then(doneCallback, failCallback, alwaysCallback),
    Validator.validate_something(1).then(doneCallback, failCallback, alwaysCallback)
);

validationPromise.done(function() {
    console.log("$.when.done() executed");
});
validationPromise.fail(function() {
    console.log("$.when.fail() executed");
});
validationPromise.always(function() {
    console.log("$.when.always() executed");
});
​

http://jsfiddle.net/6j6K2/を参照してください

4

1 に答える 1

2

私自身の質問に答える: コンストラクターは 3 つの引数を取りますが、最後の引数は progressCallbacks 用です。always() を個別に呼び出す必要があります。

var validate_date = Validator.validate_date(6).then(doneCallback, failCallback);
validate_date.always(alwaysCallback);

var validate_something = Validator.validate_something(1).then(doneCallback, failCallback);
validate_something.always(alwaysCallback);

var validationPromise = $.when(
    validate_date,
    validate_something
);
于 2012-09-19T11:51:58.870 に答える