簡體   English   中英

如何確定jQuery對象是否延遲?

[英]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 );

[1] http://api.jquery.com/jQuery.when/

由於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM