$.Mutex = (function() {function Mutex() {this.def = $.Deferred().resolve();}Mutex.prototype.exec = function(action) {var current = this.def;var next = this.def = $.Deferred();return current.then(function() {return $.when(action()).always(function() {next.resolve();});});};return Mutex;})();
2 回答

瀟瀟雨雨
TA貢獻1833條經(jīng)驗 獲得超4個贊
Deffered的作用: 在沒有這個對象之前,想要將異步的操作變?yōu)橥降?只能使用回調(diào)函數(shù).這樣的話代碼的可維護性可讀性會大大降低.
$.Deferred().resolve()是標記當前函數(shù)執(zhí)行結(jié)束,$.when(defer1,defer2).then(funcCallback)表示當前的funcCallback要等defer1,defer2執(zhí)行結(jié)束(即每個deffered對象都用resolve標記)之后再執(zhí)行,跟defer1和defer2誰先執(zhí)行誰后執(zhí)行沒有關(guān)系.
用法:$.Mutex.exec(defer1,defer1); 作用:使用Mutex使defer1,defer2只執(zhí)行一次,相當于單例

搖曳的薔薇
TA貢獻1793條經(jīng)驗 獲得超6個贊
順序處理耗時的Deferred操作,
比如有四個耗時的方法func1,func2,func3,func4
$.Mutex.exec(func1);
$.Mutex.exec(func2);
$.Mutex.exec(func3);
$.Mutex.exec(func4);
這四個方法就會順序執(zhí)行
- 2 回答
- 0 關(guān)注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消