[英]How can I determine if a jQuery object is deferred?
如果我有一個函數,有時會返回一個延遲對象,但有時會返回一個非延遲對象。 我怎么知道它是哪一個?
根據您的使用情況,您還可以使用jQuery.when
[1]:
如果將單個參數傳遞給
jQuery.when
並且它不是Deferred,則將其視為已解決的Deferred,並且將立即執行附加的所有doneCallbacks。
使用jQuery.when
您可以將您的神秘對象始終視為延遲:
// x could be a deferred object or an immediate result
var x = getMysteriousObject();
// success will be called when x is a deferred object and has been resolved
// or when x is an immediate result
jQuery.when( x ).then( success, error );
由於jQuery Deferreds是通過復制隱藏對象的方法而不是在函數上調用new運算符來創建的,因此您無法證明該對象確實是jQuery.Deferred的實例。 我想你需要選擇Duck-Typing:
“當我看到一只像鴨子一樣散步,像鴨子一樣游動,像鴨子一樣呱呱叫的鳥兒時,我稱這只鳥為鴨子。” - James Whitcomb Riley
根據否則可能返回的對象(必須預期的屬性),檢查是否存在特定的屬性/方法:
var x = getMysteriousObject();
if (x.promise) {
// Deferred
} else {
// Not a deferred
}
如果需要,您可以詳細說明此檢查:
if ($.isFunction(x.promise)) {
// Deferred
}
或(以區分Deferred對象和Promise接口的其他實現)
if (x.promise && x.resolve) {
// Deferred
}
靈感來自Niko的答案 ,我創建了一個對象是否是將檢查另一個實施基礎上,它的名字的屬性也對這些屬性的內容推遲。 我必須這樣做,因為我的另一個對象有一個名為promise的屬性。
if (typeof value.resolve !== "function") {
return false;
}
return String(value.resolve) === String($.Deferred().resolve);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.