nodejs學習筆記
標簽:node 異步 回調(diào) 單線程
1. callback 最簡單的回調(diào)
function test(sth){
console.log(sth)
}
function testCallback(callback,sth){
var sth=sth+"is cool";
callback(sth)
}
testCallback(test,"jade")
注意回調(diào)的理解:
將后續(xù)邏輯封裝的到一個起始函數(shù)中作為參數(shù),逐層嵌套。
其實仔細想想一般場景就是在一個函數(shù)中先加工參數(shù),再把加工好的參數(shù)傳給另一個函數(shù)。
2. 同步和異步的理解:
同步:想象成向老板查詢東西,老板接到電話說我?guī)湍悴椴榘。筒榘〔?,查到結(jié)果了就告訴你
異步:打電話查東西,老板說我查到了再打電話給你
差不多就這個意思,同步單線程順序執(zhí)行,瀏覽器中加載代碼就是同步的,前面寫個死循環(huán),會阻塞后面代碼執(zhí)行(瀏覽器中雖然可以并行下載,但不能并行執(zhí)行)
順序執(zhí)行,下面代碼當然執(zhí)行結(jié)果是2
var a=1;
function add(){
a++
}
function print(){
console.log(a)
}
add()
print()
如果我們將add函數(shù)改造一下,加入延時會怎么樣?
var a=1;
function add(){
//a++
setTimeout(function(){
a++
},0)
}
function print(){
console.log(a)
}
add()
print()
醬紫,會打印什么?
打印出來的是1?黑人問號
理解下啊,瀏覽器遇到setTimeout就會把它放到一個延時序列里,這個延時序列的執(zhí)行時機時其他代碼執(zhí)行完畢,so延時0秒也不執(zhí)行就不奇怪了吧
如何避免這個問題,如何避免這個問題,當然是把函數(shù)加到setTimeout的里面咯,like this:
function add(callback){
//a++
setTimeout(function(){
a++
callback()
},0)
}
不要看到calbback就發(fā)毛,這個東西就是個回調(diào)函數(shù)