怎麼獲取異步操作的結果或者說返回值?
例如下面這個函數
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遇到的問題,方便回來看看