2012-08-31 45 views
1

在我的代碼中,我想測試一個函數是否是異步的,如果是,則使用它的回調函數。但是,如果不是,那麼我只需手動調用下一個函數。那麼有沒有辦法來測試一個函數是否是異步的?如果不是,那麼我在哪裏可以找到所有異步jQuery函數的列表?jQuery - 有沒有一種方法來測試一個函數是否是異步的?

if (isAsynchronous(fn)) { 
    args.push(function() { alert('callback!'); }); 
    this.fn.apply(this, args); 
} else { 
    this.fn.apply(this, args); 
    alert('synchronous'); 
} 

所以,如果這是不可能的,有一個名單將是下一個最好的事情。

var asynchs = { 
    animate: true, 
    fadeIn: true 
    //etc... 
}; 

if (asynchs[fn]) { 
    args.push(function() {alert('callback!'); }); 
    this.fn.apply(this, args); 
} else { 
    this.fn.apply(this, args); 
    alert('synchronous'); 
} 
+0

是的,你必須閱讀文檔:) – PhD

+0

@PhD - 哈哈我在網上找了一份清單,發現沒有,並開始閱讀文檔。然後想到,'嘿,也許有一種方法來測試它是否是異步的'所以我只是想在做所有這些工作之前我會問。 :) – Aust

+0

_「我在哪裏可以找到所有異步jQuery函數的列表」_ - 不是每個jQuery動畫或接受回調作爲參數的Ajax函數嗎? – nnnnnn

回答

2

沒有編程方式來確定函數是同步還是異步。實際上,函數可能是同步的或異步的,具體取決於它傳遞的內容。像$.ajax()可以傳遞一個參數,確定它是哪一個。

所以,如果你想知道一個函數是什麼,你必須閱讀文檔或代碼。一般來說,如果一個函數提供了「完成」回調或類似的東西,那麼你應該懷疑它可能是異步的,或者有一個異步選項,然後查看文檔中的確認信息。如果一個jQuery方法沒有完成回調,那麼它可能不是異步的。

$.each()之類的東西只是使用回調作爲其實現的一部分(它們不是「完成」回調)並且不是異步的。

您還應該懷疑,執行動畫或聯網或等待一段時間的ANY方法可能是異步的。 jquery文檔寫得非常好,所以如果你不確定的話,快速瀏覽一下通常很不重要。

相關問題