学习Node时遇到的回调函数问题

怎么获取异步操作的结果或者说返回值?

例如下面这个函数

function test(){
	setTimeout(function(){
		var data = 'hello word'
	},1000)
}

此时要如何获取这个data的数据呢?

有人这样写,给变量接收返回值就行了,如下

 function test(){
	var data = '默认数据'
	setTimeout(function(){
		var data = 'hello word'
	},1000)
	return data
}
console.log(test())

但是实际的输出结果是:
在这里插入图片描述
说明这个这个执行流程并没有等待耗时操作完成才去返回数据,而是直接返回数据了,此时就要用到回调函数来获取异步操作(耗时操作)的结果,将上述函数改写成

 function test(callback){
	setTimeout(function(){
		var data = 'hello word'
		callback(data)//在此处执行回调函数
	},1000)
}
test(function(data2){
	console.log(data2)
})

结果如下:成功获取到数据
在这里插入图片描述

原理解释

一开始我也是懵逼的,找了很多帖子终于明白了,首先要明白的就是函数是可以当作形参传入到另一个函数的,这点很重要

在本部分中,test(callback),其中test()是函数,callback是形参(这个名字随便怎么起,callback见名知意),然后我们在调用这个test()函数的时候不是传入了function(data2)这个函数么?其中的data2不用我解释了把,因为我们给callback这个形参传入的是一个带有一个形参的函数,所以调用的时候就这这样调用啦
callback(data),刚好这个data就是异步操作的结果,这就相当于把test()函数的的结果通过一个回调函数(callback)传了出去,形参data==》data2 ,真是巧妙!

在此记录一下学习node遇到的问题,方便回来看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值