$.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 关注
- 75 浏览
添加回答
举报
0/150
提交
取消