$.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條經驗 獲得超4個贊
Deffered的作用: 在沒有這個對象之前,想要將異步的操作變為同步的,只能使用回調函數.這樣的話代碼的可維護性可讀性會大大降低.
$.Deferred().resolve()是標記當前函數執行結束,$.when(defer1,defer2).then(funcCallback)表示當前的funcCallback要等defer1,defer2執行結束(即每個deffered對象都用resolve標記)之后再執行,跟defer1和defer2誰先執行誰后執行沒有關系.
用法:$.Mutex.exec(defer1,defer1); 作用:使用Mutex使defer1,defer2只執行一次,相當于單例

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