浅谈JavaScript异步编程


Posted in Javascript onJanuary 20, 2017

在一年前初学js的时候,看过很多关于异步编程的讲解。但是由于实践经验少,没有办法理解的太多,太理论的东西也往往是看完就忘。

经过公司的三两个项目的锻炼,终于对js异步编程有了比较具体的理解。但始终入门较浅,在这里就当是给自己一个阶段性的总结。

在异步编程中,一条语句的执行不能依赖上一条语句执行完毕的结果,因为无法预测一条语句什么时候执行完毕,它与代码顺序无关,语句是并发执行的。

例如以下代码:

$.get($C.apiPath+'ucenter/padCharge/findMember',{id:memberId},function(data){
  if(data.error){
    layer.close(memberLayer);
    padInOut(padId,memberId);
    allPads();
  }
});

这三句在语境中的作用是,在完成某个ajax访问并成功获得数据之后,关闭某个弹层(1),执行padInOut函数(2),执行allPads函数(3);(1)的顺序无所谓,但是我希望(3)在(2)之后执行,然而这几句代码无法达到我希望的结果,因为三个函数是同时执行的,allPads无法等待padInOut执行完毕之后再执行,所以结果当然会出错。

我最后采取的解决方法是回调函数:在padInOut函数定义加入回调函数,如下:

function padInOut(padId,memberId,callback){
     $F.POSTLoading($C.apiPath + 'ucenter/padCharge/padInOut',{id:padId,memberId:memberId},function(data){
         if(callback)callback()
     });
 };

当方法执行完毕并且回调函数存在时,执行回调函数。此时函数执行时通过传参即可达到目的:

padInOut(padId,memberId,allPads)

回调函数是js异步编程经常会用到的方法。然而使用回调函数存在不好的地方,即会造成回调地狱。所以es新标准出来也不断寻求解决回调的方案。这是后话,本篇写到这里。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery实现用户注册的表单验证示例
Aug 28 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
Aug 05 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 Javascript
基于javascript实现泡泡大冒险网页版小游戏
Mar 23 Javascript
javascript 跨域问题以及解决办法
Jul 17 Javascript
form表单序列化详解(推荐)
Aug 15 Javascript
实例详解JSON取值(key是中文或者数字)方式
Aug 24 Javascript
vue地区选择组件教程详解
May 04 Javascript
js this 绑定机制深入详解
Apr 30 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
一起来了解一下JavaScript的预编译(小结)
Mar 01 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
Jan 20 #Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
Jan 19 #Javascript
BootStrap组件之进度条的基本用法
Jan 19 #Javascript
微信小程序 页面跳转和数据传递实例详解
Jan 19 #Javascript
js实现符合国情的日期插件详解
Jan 19 #Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 #Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 #Javascript
You might like
Session保存到数据库的php类分享
2011/10/24 PHP
PHP闭包函数详解
2016/02/13 PHP
Yii2中datetime类的使用
2016/12/17 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
python通过yield实现数组全排列的方法
2015/03/18 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
python执行等待程序直到第二天零点的方法
2015/04/23 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
汽车专业学生自我评价
2014/01/19 职场文书
社区党员先进事迹
2014/01/22 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
Java死锁的排查
2022/05/11 Java/Android
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python