首页 > 代码库 > jquery deferred小结
jquery deferred小结
jquery deferred是一个异步回调的机制
- 目前,jQuery的Ajax方法($.ajax,$get,$post)返回的都是Promise对象。
- 异步回调的适合作用于i/o事件,要等待用户动作才能做出相应的callback。
- 比如,传递promise对象就相当于声明:“你感兴趣的某某事就要发生了,想知道什么时候完事吗?给这个promise一个回调就行了!“
- promise对象和EventEmitter对象一样,允许向同一个事件绑定任意多的处理器(堆积技术)
- 如$(‘#doucment‘).click(callback1).click(callback2); ----EventEmitter
- fn().then(callback1).then(callback2ForCallback1); ----promise
- Promise对象有多个结果
- done(callbakc)
- fail(callback)
- always(callback) 不管成功失败总是调用
- progress(callback) 对于挂起状态的Deferred对象调用notify时,运行progress回调
- Deferred是promise对象的超集,它比Promise多了一项关键特性:可以直接触发;而纯Promise实例只允许添加多个调用,而且必须由其他什么东西触发调用
- resolve()会直接触发done
- reject()会直接触发fail
- notify会调用我们设定的progress回调
- 三者都能接受任意参数
<textarea id="document"></textarea> <p id="indicator"></p> <script type="text/javascript" src=http://www.mamicode.com/"jquery.js"></script> <script type="text/javascript"> //创建一个deferred对象 var defer = $.Deferred(); var wordGoal = 30; //defer挂起时的callback defer.progress(function (wordCount) { var percentComplete = Math.floor(wordCount/wordGoal*100); $(‘#indicator‘).text(percentComplete + ‘%complete‘); }); //defer完成时的callback defer.done(function(msg) { $(‘#indicator‘).text(msg); }); //事件回调 $(‘#document‘).on(‘keypress‘, function() { var wordCount = $(this).val().split(/\s+/).length; //回调中监听完成事件并触发 if (wordCount >= wordGoal) { defer.resolve(‘Good job!‘); } //回调中监听挂起事件并处罚 defer.notify(wordCount); }); </script>
*一旦执行了defer对象,再做defer的notify将不会有任何反应,就像任何额外的resolve调用及reject调用也会被无视一样
jquery deferred小结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。