浅谈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 相关文章推荐
使两个iframe的高度与内容自适应,且相等
Nov 20 Javascript
javascript 树控件 比较好用
Jun 11 Javascript
Javascript 汉字字节判断
Aug 01 Javascript
Juqery Html(),append()等方法的Bug解决方法
Dec 13 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
Dec 10 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
Javascript实现的StopWatch功能示例
Jun 13 Javascript
Angular中响应式表单的三种更新值方法详析
Aug 22 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
May 13 Javascript
js实现类选择器和name属性选择器的示例步骤
Feb 07 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
实用函数5
2007/11/08 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
python学习之matplotlib绘制散点图实例
2017/12/09 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
Python错误处理操作示例
2018/07/18 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
大学生毕业自荐信
2013/10/10 职场文书
商务日语专业毕业生求职信
2013/10/26 职场文书
团组织关系介绍信
2014/01/12 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
SQL SERVER触发器详解
2022/02/24 SQL Server