异步编程的处理
来源:互联网 发布:网页编程待遇 编辑:程序博客网 时间:2024/06/01 08:50
感觉不很懂啊,还是先记下来吧!
<script type="text/javascript"> // 回调处理 $('button:first').click(function() { $("#block1").animate({ width: "50%" }, 2000, function() { // 嵌套回调 $("#block2").animate({ width: "50%" }, 2000); }); }); // jQuery的Deferred处理 $('button:last').click(function() { function animate1() { var dtd = $.Deferred(); // 生成Deferred对象 $("#block3").animate({ width: "50%" }, 2000, function() { dtd.resolve(); // 改变Deferred对象的执行状态 }); return dtd; } function animate2() { var dtd = $.Deferred(); // 生成Deferred对象 $("#block4").animate({ width: "50%" }, 2000, function() { dtd.resolve(); // 改变Deferred对象的执行状态 }); return dtd; } var anim = animate1(); anim.then(function() { $("#block3").text('block3动画动画直接结束'); return animate2(); }).then(function() { $("#block4").text('block4动画动画直接结束'); }); }); </script>
JavaScript的执行流程是分为"同步"与"异步"
传统的异步操作会在操作完成之后,使用回调函数传回结果,而回调函数中则包含了后续的工作。这也是造成异步编程困难的主要原因:
我们一直习惯于“线性”地编写代码逻辑,但是大量异步操作所带来的回调函数,会把我们的算法分解地支离破碎。
嵌套式回调
动画为例,下一个动画要等上一个执行完毕才可以继续,流程就会写到回调里面
//执行多个动画$('ele1').animate({ opacity: '.5'}, 4000, function() { $('ele2').animate({ width: '100px' }, 2000, function() { $('ele3').animate({ height: '0' }, 2000); });});
上面的代码编程逻辑也是正确的,但是针对这样的异步嵌套的回调逻辑,当我们的嵌套越多,代码结构层级会变得越来越深。首先是阅读上会变得困难,其次是强耦合,接口变得不好扩展。我们需要一种模式来解决这种问题,这就是Promises所要做的事情。
为了让前端们从回调的地狱中回到天堂, jQuery 也引入了 Promise 的概念。 Promise 是一种令代码异步行为更加优雅的抽象,有了它,我们就可以像写同步代码一样去写异步代码。这个东东看起来很复杂,实际上我们只要抓住核心的使用就可以了
观察右边代码:
通过$.Deferred处理过的代码,很明显没有了回调的嵌套,虽然代码量看起来多了点,但是实际上,每一个代码执行部分都被封装了起来,只留了Deferred的接口处理了,等于是我们把执行的流程控制交给了Deferred,这样的好处就是我们在写嵌套函数的时候,可以用deferred提供的管道风格编写同步代码了
dtd.then(function() { //操作1}).then(function() { //操作2}).then(function() { //操作3})
这里要了解3个步骤
var dtd = $.Deferred(); //创建dtd.resolve(); //成功dtd.then() //执行回调
0 0
- 异步编程的处理
- 异步编程中的异常处理
- 异步提交的处理
- 异步处理的延伸
- GCD的异步处理
- Servlet的异步处理
- 异步处理的原理
- ajax的异步编程
- 异步FIFO的编程
- python的异步编程
- Asp.Net异步页处理-NET编程
- YARN/MRv2异步处理编程模型介绍
- 多线程编程之Handler异步消息处理
- select 的 poll 异步处理
- 同步,异步IRP的处理
- jquery 异步数据的处理
- 同步,异步IRP的处理
- vb.net 的异步处理
- LeetCode_Remove Element
- 了解你的磁盘之使用bonnie++测试磁盘性能
- Volley使用(一)
- win8显示缩略图
- LXC1.0.7-- lxc-start 源码分析 03
- 异步编程的处理
- jQuery 中 三目运算 替代 if 判断 的简洁性
- 执行事务时,如果顺序不一样,会导致sql锁死
- Java I/O解读与使用实例
- 处理器体系结构(了解CPU的基本运行原理)——《深入理解计算机系统》
- 一个多maven项目聚合的实例
- Linux_shell——第1章牛刀小试
- openfire配置标准数据库(mysql)
- Oracle分区