2016-08-19 130 views
0

我寫這個插件,我經常使用,我喜歡它,因爲大多數時候我只檢查是否true。不過,我剛剛遇到需要知道結果是否爲falsejQuery插件成功和失敗回調

我想我想要一個successfailure函數內部回調,但我無法弄清楚如何返回它。延期和承諾現在正在破壞一個大腦細胞。

jQuery.fn.exists = function(fn) { 
    if (this.length > 0) { 
     var f = arguments[0]; 
     arguments[0] = function(e) { 
      f(e); 
     } 
     fn.apply(this, arguments); 
     return fn ? this.bind(name, fn) : this.trigger(name); 
    } else { 
     return this.length > 0; 
    } 
} 
+0

這裏沒有異步代碼,所以你可以把兩個函數作爲你插件的參數,並根據需要調用它們。 –

回答

0

如果你可以提供一個例子,這將是有用的,這個插件做什麼和你的最終結果將是什麼的目的是有點不清楚。

但是,我知道承諾,看看下面。

jQuery.fn.exists = function(fn) { 
    var deferredObj = jQuery.Deferred(); 
    if (this.length > 0) { 
     var f = arguments[0]; 
     arguments[0] = function(e) { 
      f(e); 
     } 
     fn.apply(this, arguments); 
     if(fn) { this.bind(name, fn) 
     } else { this.trigger(name)} ; 
     deferredObj.resolve("some success value"); 
    } else { 
     deferredObj.reject("Length is not greater then 0"); 
    } 
    return deferredObj.promise; 
} 

的代碼片段您已經添加了沒有異步操作,所以我覺得用承諾什麼那麼,一個簡單的返回布爾就夠沒有利潤。

一個codepen示例可能有助於明確你的問題是什麼。