2017-03-08 41 views
1

是否有可能创建自己的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(); 
        } 
       }); 
      } 
    } 
+0

你试过fadeElementOut(此$ EL)。然后(()=> this.dispose() ); –

回答

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(); 
// ^^^^^^ 
} 
+0

啊,这是更有意义!谢谢! – styler