ES5使用回调函数实现异步操作
同步变成异步方法
在ES5中 我们知道javascript是单线程的,所以所有的操作其实是同步操作,但是为了节省资源和时间,可以将同步的操作变为异步操作,我在做项目时遇到了类似问题(说白了就是调整程序执行的先后顺序【我这里是调整方法执行的先后顺序】)
看代码
//原本执行顺序 获取用户信息===》通过用户id获取用户订单
function getUserInfo(){
//注意这里一般使用的是异步操作来获取用户信息
console.log('使用ajax获取到用户信息【异步操作】')
let user={id:'999'}
return user;
}
//通过用户id获取用户订单信息
function getUserOrder(id){
//注意这里一般使用的是异步操作来获取用户信息
console.log('通过传来的用户id获取到用户订单信息【异步操作】')
let order='获取到用户id:' id '的订单信息'
return order;
}
//执行程序
const user=getUserInfo();
const order=getUserOrder(user.id);
//some code ....
真实执行结果:
直接报错,无法获取到订单信息,一般错误信息是没给getUserOrder方法传id,也就是传入的id是undefined
报错原因
是因为ajax是异步请求,会导致程序先执行·getUserOrder(user.id)
再执行getUserInfo()
,,并不是我们所期望的,所以这里改造一下
改造执行顺序
//原本执行顺序 获取用户信息===》通过用户id获取用户订单
function getUserInfo(){
//注意这里一般使用的是异步操作来获取用户信息
console.log('使用ajax获取到用户信息【异步操作】')
let user={id:'999'}
return user;
}
//通过用户id获取用户订单信息
function getUserOrder(id){
//注意这里一般使用的是异步操作来获取用户信息
console.log('通过传来的用户id获取到用户订单信息【异步操作】')
let order='获取到用户id:' id '的订单信息'
return order;
}
//执行程序
const user=getUserInfo();
setTimeout(function(){
const order=getUserOrder(user.id);
},300)
//some code ....
现在的执行结果:
获取到用户id:999的订单信息(使我们所期望的)
再看一个小的demo案例
//模拟创建自己的ajax
let ajax = function(callback) {
console.log("开始执行ajax函数");
let param={mongy:1000000000000,unit:'元'};
console.log('获取到需要传入到回调的参数:',param)
setTimeout(function(){
//执行回调函数
callback(param)
},1000);
};
let aa=function(param){
//获取异步数据
console.log('拿到传入回调的结果:',param);
}
ajax(aa)
写的不是很好,程序员干久了,表达能力被程序化,很不好描述~
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgchiaa
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13