學習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遇到的問題,方便回來看看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章