怎么获取异步操作的结果或者说返回值?
例如下面这个函数
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遇到的问题,方便回来看看