色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

jquery deferred源碼

張吉惟2年前9瀏覽0評論

jQuery的Deferred對象能夠簡化異步操作的管理,使代碼更加容易閱讀和維護。在實際使用中,可能會遇到一些需要修改Deferred對象的情況,此時深入理解Deferred對象的實現原理就變得尤為重要。

Deferred對象的主要實現分為兩個部分,分別為異步操作的任務隊列和異步操作的狀態機制。任務隊列可以將異步操作進行串行或并行處理,當任務隊列中的所有任務執行完成時,就可以觸發異步完成的回調函數。異步操作的狀態機制則可以自動處理異步操作的狀態變化,包括等待中、進行中和已完成。當異步操作完成時,會根據異步操作的狀態自動執行相應的回調函數。

// 關于異步狀態定義的枚舉值
jQuery.Deferred.prototype = {
// 標志Deferred對象當前狀態為等待中
state: function () {
return this.promise ? this.promise.state() : this._state;
},
// 標志Deferred對象當前狀態為等待中
always: function () {
deferred.done(arguments).fail(arguments);
return this;
},
// 標志Deferred對象當前狀態為等待中,返回一個新的Deferred對象
then: function () {
var fns = arguments;
return jQuery.Deferred(function (newDefer) {
jQuery.each(tuples, function (i, tuple) {
var fn = jQuery.isFunction(funcs[i]) && funcs[i];
deferred[tuple[1]](function () {
var returned = fn && fn.apply(this, arguments);
if (returned && jQuery.isFunction(returned.promise)) {
returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
} else {
newDefer[tuple[0] + "With"](this === deferred ? newDefer.promise() : this, fn ? [returned] : arguments);
}
});
});
tuples = null;
}).promise();
},
};

以上的代碼即為jQuery deferred對象的狀態定義,在其中,$._Deferred()和$.Deferred()實例化時,可以根據需求來改變目標對象的狀態。

除了上述代碼之外,Deferred對象還支持許多其他的操作,比如promise()方法用于返回當前Deferred對象的promise對象;resolve()方法用于標識異步操作已成功完成;reject()方法用于標識異步操作已失敗;notify()方法用于通知異步操作的進度狀態等等。因此,深入理解Deferred對象的實現原理可以讓我們更加靈活地使用Deferred對象,提高代碼的可讀性和可維護性。