浅谈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 相关文章推荐
鼠标事件延时切换插件
Mar 12 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
Feb 02 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
纯js模拟div层弹性运动的方法
Jul 27 Javascript
jQuery实现Email邮箱地址自动补全功能代码
Nov 03 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
Jun 26 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
详解VSCode配置启动Vue项目
May 14 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
JS图片预加载三种实现方法解析
May 08 Javascript
vue render函数动态加载img的src路径操作
Oct 26 Javascript
详解JavaScript中的执行上下文及调用堆栈
Apr 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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
C#中的验证控件有几种
2014/03/08 面试题
运动会四百米广播稿
2014/01/19 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
英文版辞职信
2015/02/28 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
婚育证明格式
2015/06/17 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android