浅谈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 数据缓存data(name, value)详解及实现
Jan 04 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
Dec 28 Javascript
js Array对象的扩展函数代码
Apr 24 Javascript
javascript异步编程的4种方法
Feb 19 Javascript
javascript实现切换td中的值
Dec 05 Javascript
jQuery的观察者模式详解
Dec 22 Javascript
浅析Javascript ES6中的原生Promise
Aug 25 Javascript
js转html实体的方法
Sep 27 Javascript
11行JS代码制作二维码生成功能
Mar 09 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
May 14 Javascript
微信小程序定义和调用全局变量globalData的实现
Nov 01 Javascript
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
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指定函数参数默认值示例代码
2013/12/04 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
javascript的内存管理详解
2013/08/07 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
GWT都有什么特性
2016/12/02 面试题
口头翻译求职人自荐信
2013/12/07 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
生产现场禁烟通知
2015/04/23 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
Docker下安装Oracle19c
2022/04/13 Servers
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers