浅谈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动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
js中settimeout方法加参数的使用实例
Feb 27 Javascript
jQuery 中DOM 操作详解
Jan 13 Javascript
React快速入门教程
Jan 17 Javascript
判断div滑动到底部的scroll实例代码
Nov 15 Javascript
基于JavaScript中字符串的match与replace方法(详解)
Dec 04 Javascript
vue 组件 全局注册和局部注册的实现
Feb 28 Javascript
vue中的provide/inject的学习使用
May 09 Javascript
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 Javascript
jQuery实现简单全选框
Sep 13 jQuery
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数组使用规则分析
2015/02/27 PHP
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
javascript 函数调用的对象和方法
2010/07/01 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
JS中操作JSON总结
2020/12/06 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
网络技术支持面试题
2013/04/22 面试题
自我评价个人范文
2013/12/16 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2014年科协工作总结
2014/12/09 职场文书
新生开学寄语大全
2015/05/28 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
正则表达式拆分url实例代码
2022/02/24 Java/Android
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android