浅谈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 相关文章推荐
IE下JS读取xml文件示例代码
Aug 05 Javascript
动态加载script文件的两种方法
Aug 15 Javascript
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
Feb 18 Javascript
JS传值出现中文参数乱码的解决方法
Jun 30 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
vue 子组件向父组件传值方法
Feb 26 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
Sep 21 Javascript
详解js实时获取并显示当前时间的方法
May 10 Javascript
vue组件创建的三种方式小结
Feb 03 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
中篇:安装及配置PHP
2006/12/13 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python 切分数组实例解析
2019/11/07 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
python的dict判断key是否存在的方法
2020/12/09 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
HEMA英国:荷兰原创设计
2018/08/28 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
优秀员工推荐信
2014/05/10 职场文书
给校长的建议书200字
2014/05/16 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
终止劳动合同协议书
2014/10/05 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
sql中mod()函数取余数的用法
2021/05/29 SQL Server
mysql如何配置白名单访问
2021/06/30 MySQL
python代码实现备忘录案例讲解
2021/07/26 Python
Python 实现Mac 屏幕截图详解
2021/10/05 Python