然后延迟多个doneCallbacks

时间:2012-10-02 11:51:37

标签: javascript jquery jquery-deferred

deferred.then()的文档说明doneCallbacks为A function, or array of functions, called when the Deferred is resolved.

当我写.then(new Array(getData2, showDiv)).then([getData2, showDiv])时 没有一个被称为。

正确的语法是什么?

更新

数组的语法应该是.then(new Array(getData2(), showDiv()))还是.then([getData2(), showDiv()])括号?

请参阅http://jsfiddle.net/JSw5y/894/

1 个答案:

答案 0 :(得分:-1)

这个似乎是可能是jQuery中的一个错误。

一个简单的解决方法;

var CallbackHandler = (function () {
    var callbacks = [];

    return {
        'add': function (fn) {
            callbacks.push(fn);
            return this;
        },
        'executor': function () {
            var calledBy = this;
            $.each(callbacks, function () {
                this.call(calledBy);
            });
        }
    };

})();

CallbackHandler
    .add(function () {
        // first callback
    })
    .add(function () {
        // second callback
    });

// Called as:
$.when({a: 1})
 .then(CallbackHandler.executor);