浅谈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 相关文章推荐
js前台分页显示后端JAVA数据响应
Mar 18 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
使用AngularJS对路由进行安全性处理的方法
Jun 18 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
Vue.directive自定义指令的使用详解
Mar 10 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
从0到1构建vueSSR项目之路由的构建
Mar 07 Javascript
使用express获取微信小程序二维码小记
May 21 Javascript
vue 解决路由只变化参数页面组件不更新问题
Nov 05 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
Sep 08 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
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
利用Python为iOS10生成图标和截屏
2016/09/24 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
python实现图片彩色转化为素描
2019/01/15 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
python实现简单文件读写函数
2021/02/25 Python
互动出版网:专业书籍
2017/03/21 全球购物
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
优秀共产党员先进事迹
2014/01/27 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
GTX1650super好不好 gtx1650super显卡属于什么级别
2022/04/08 数码科技
Android中View.post和Handler.post的关系
2022/06/05 Java/Android