浅谈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 相关文章推荐
客户端 使用XML DOM加载json数据的方法
Sep 28 Javascript
JS两种定义方式的区别、内部原理
Nov 21 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 Javascript
javascript屏蔽右键代码
May 15 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
初识Javascript小结
Jul 16 Javascript
BootStrap中的表单大全
Sep 07 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
Mar 21 jQuery
js和jquery中获取非行间样式
May 05 jQuery
react配置antd按需加载的使用
Feb 11 Javascript
关于vue的列表图片选中打钩操作
Sep 09 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 goto语句简介和使用实例
2014/03/11 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python实现网站注册验证码生成类
2017/06/08 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
python实现简单日期工具类
2019/04/24 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
初中生学习的自我评价
2013/11/14 职场文书
《值日生》教学反思
2014/02/17 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
投资合作协议书
2014/04/17 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
信访工作汇报材料
2014/10/27 职场文书