2017-03-08 44 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