【问题标题】:jQuery: promises: 'always()' not executingjQuery:承诺:'always()' 没有执行
【发布时间】:2012-09-19 20:25:58
【问题描述】:

我无法让 always() 触发我在 jQuery 中的 Deferred。 done() 和 fail() 工作正常,但不知何故我一定做错了什么,因为 always() 永远不会触发。

使用 $.当它起作用时......

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/

【问题讨论】:

    标签: javascript jquery jquery-deferred promise


    【解决方案1】:

    回答我自己的问题:构造函数接受三个参数,但最后一个是用于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
    );
    

    【讨论】:

    • 你最好一直使用donefailprogressthenpipe 的别名 1.8.0 这意味着它要慢得多,因为它必须考虑潜在的复杂场景。
    • 感谢您的提示。无论如何,我实际上已经开始这样做了,因为它会产生更具可读性的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2015-12-23
    • 2018-08-02
    • 2016-01-10
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多