JQuery: обещания: всегда () не выполняется
У меня возникают проблемы при получении всегда () для запуска моего Deferred в jQuery. done() и fail() работают нормально, но почему-то я должен делать что-то не так, потому что всегда () никогда не срабатывает.
С $. Когда это работает...
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/
1 ответ
Решение
Отвечая на мой собственный вопрос: конструктор принимает три аргумента, но последний - для progressCallbacks. Вам нужно звонить всегда () отдельно.
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
);