博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步编程的处理
阅读量:4487 次
发布时间:2019-06-08

本文共 1368 字,大约阅读时间需要 4 分钟。

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()              //执行回调

具体的我们可以参考下jQuery的Deferred部分的API说明,

 

举例

1  2  3  4  5     
6 异步编程处理 7 24 25 26 27 28 29 30
31
32
block1执行动画
33
block2执行动画
34
block3执行动画
35
block4执行动画
36 37 85 86 87
View Code

 

转载于:https://www.cnblogs.com/guorange/p/6685846.html

你可能感兴趣的文章
【Scala语言编程_1】Scala基础与HelloWorld
查看>>
js-FCC算法-Symmetric Difference
查看>>
退化的语言能力
查看>>
Android Studio 编写 JNI
查看>>
hostapd作为radius服务器
查看>>
【C++】C++自学进阶(6):继承(2)——继续进阶
查看>>
net.sf.json.JSONException: There is a cycle in the hierarchy!的解决办法
查看>>
向量图兼容组件VectorCompat
查看>>
第二十六章 oop中元类、异常处理
查看>>
系统的思考性能问题
查看>>
rtrim
查看>>
Educational Codeforces Round 34 (Rated for Div. 2) D - Almost Difference(高精度)
查看>>
awk调用系统命令
查看>>
Android SharedPreference 数据存储
查看>>
Mark Down初学
查看>>
Python之路【第九篇】堡垒机基础&数据库操作
查看>>
小教练教MM如何去掉你的小肚子
查看>>
JS跨域请求
查看>>
jmeter之Dummy Sampler
查看>>
MySQL 调优基础(四) Linux 磁盘IO
查看>>