浅谈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 Date自定义函数 延迟脚本执行
Mar 10 Javascript
探讨JavaScript中声明全局变量三种方式的异同
Dec 03 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
js模拟C#中List的简单实例
Mar 06 Javascript
JS实现让网页背景图片斜向移动的方法
Feb 25 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
May 24 Javascript
react-native 圆弧拖动进度条实现的示例代码
Apr 12 Javascript
js中对象与对象创建方法的各种方法
Feb 27 Javascript
使用vue实现各类弹出框组件
Jul 03 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 Javascript
vue实现页面滚动到底部刷新
Aug 16 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中实现Javascript的escape()函数代码
2010/08/08 PHP
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php中autoload的用法总结
2013/11/08 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
什么叫做SQL注入,如何防止
2016/10/04 面试题
英语自荐信范文
2013/12/11 职场文书
国税会议欢迎词
2014/01/16 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
副总经理岗位职责
2014/03/16 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
职业规划实施方案
2014/06/10 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书