浅谈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 相关文章推荐
再论Javascript下字符串连接的性能
Mar 05 Javascript
iframe的父子窗口之间的对象相互调用基本用法
Sep 03 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
Apr 03 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 Javascript
微信小程序switch开关选择器使用详解
Jan 31 Javascript
r.js来合并压缩css文件的示例
Apr 26 Javascript
vuex进阶知识点巩固
May 20 Javascript
Bootstrap-table使用footerFormatter做统计列功能
Sep 07 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 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 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
python实现求特征选择的信息增益
2018/12/18 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
Python sorted对list和dict排序
2020/06/09 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
关于赌博的检讨书
2014/01/24 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
检讨书1000字
2014/10/11 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
中学生自我评价2015
2015/03/03 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
革命电影观后感
2015/06/18 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
商业计划书格式、范文
2019/03/21 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL