我可以解析函数范围的延迟对象还是我必须传递延迟对象?

时间:2017-03-08 19:30:20

标签: javascript jquery

是否可以创建一个创建自己的Deferred对象的函数,当函数有Deferred.resolved时,继续使用Deferred.then方法?或者我是否必须在函数外部创建Deferred对象,将其传入然后返回已解析的对象?

JS

function hide() {
    $.when(fadeElementOut(this.$el)).then(() => this.dispose());
}

function fadeElementOut($el) {
            if($el) {
                let $deferred = $.Deferred();
                $el.addClass(config.stateClasses.hidden);

                $el.on('transitionend', (event) => {
                    if(event.originalEvent.propertyName === 'opacity') {
                        return $deferred.resolve();
                    }
                });
            }
    }

1 个答案:

答案 0 :(得分:2)

是的,它不仅可行,而且还建议在函数内创建最终导致其解析的延迟对象。但是,$.when不会神奇地检测到延迟的存在,而是你必须return延期的承诺:

function hide() {
    fadeElementOut(this.$el).then(() => this.dispose());
}

function fadeElementOut($el) {
    const deferred = $.Deferred();
    if ($el) {
        $el.addClass(config.stateClasses.hidden);
        $el.on('transitionend', event => {
            if (event.originalEvent.propertyName === 'opacity') {
                deferred.resolve();
                // a `return` here is pointless
            }
        });
    } else {
        deferred.resolve(); // when there is no element, fulfill the promise immeidately
    }
    return deferred.promise();
//  ^^^^^^
}
相关问题