浅谈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 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
Jquery下判断Id是否存在的代码
Jan 06 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
Nov 18 Javascript
jquery选择器之层级过滤选择器详解
Jan 27 Javascript
jQuery层级选择器用法分析
Feb 10 Javascript
jQuery实现锚点scoll效果实例分析
Mar 10 Javascript
给angular加上动画效遇到的问题总结
Feb 17 Javascript
jQuery插件dataTables添加序号列的方法
Jul 06 Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 Javascript
微信小程序 图片宽高自适应详解
May 11 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
phpize的深入理解
2013/06/03 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
基于php编程规范(详解)
2017/08/17 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
jquery编写日期选择器
2017/03/16 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
python编写简单爬虫资料汇总
2016/03/22 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
python中对_init_的理解及实例解析
2019/10/11 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
2019史上最全Database工程师题库
2015/12/06 面试题
介绍下Lucene建立索引的过程
2016/03/02 面试题
财务与信息服务专业推荐信
2013/11/28 职场文书
环保建议书200字
2014/05/14 职场文书
温馨提示标语
2014/06/26 职场文书
失职检讨书大全
2015/01/26 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
nginx结合openssl实现https的方法
2021/07/25 Servers