浅谈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 相关文章推荐
TFDN图片播放器 不错自动播放
Oct 03 Javascript
基础的prototype.js常用函数及其用法
Mar 10 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
Aug 10 Javascript
jquery增加和删除元素的方法
Jan 14 Javascript
完美的js div拖拽实例代码
Sep 24 Javascript
基于Bootstrap仿淘宝分页控件实现代码
Nov 07 Javascript
jsp 自动编译机制详细介绍
Dec 01 Javascript
ES5学习教程之Array对象
Apr 01 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
Jan 23 Javascript
微信小程序保存图片到相册权限设置
Apr 09 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/10/09 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
JavaScript 参考教程
2006/12/29 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
Python中二维列表如何获取子区域元素的组成
2017/01/19 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python笔试面试题小结
2019/09/07 Python
Python换行与不换行的输出实例
2020/02/19 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
入党申请书自我鉴定
2013/10/12 职场文书
初中生物教学反思
2014/01/10 职场文书
售后客服工作职责
2014/06/16 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
公积金接收函格式
2015/01/30 职场文书
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技