浅谈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 相关文章推荐
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
jquery ajax提交整个表单元素的快捷办法
Mar 27 Javascript
jQuery中:visible选择器用法实例
Dec 30 Javascript
jquery插件corner实现圆角边框的方法
Mar 09 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Dec 14 Javascript
JS经典正则表达式笔试题汇总
Dec 15 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
jQuery实现菜单的显示和隐藏功能示例
Jul 24 jQuery
mpvue微信小程序开发之实现一个弹幕评论
Nov 24 Javascript
vue实现拖拽效果
Dec 23 Javascript
一小时迅速入门Mybatis之bind与多数据源支持 Java API
Sep 15 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 获取一个月第一天与最后一天的代码
2010/05/16 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
js中document.write的那点事
2014/12/12 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
2016/05/24 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
值得收藏的10道python 面试题
2019/04/15 Python
Python适配器模式代码实现解析
2019/08/02 Python
解决Python使用列表副本的问题
2019/12/19 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
新闻专业毕业生英文求职信
2014/03/19 职场文书
中学推普周活动总结
2015/05/07 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
2016十一国庆节感言
2015/12/09 职场文书
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS