回調(diào),同步異步

nodejs學(xué)習(xí)筆記

標(biāo)簽:node 異步 回調(diào) 單線程


1. callback 最簡(jiǎn)單的回調(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ù)邏輯封裝的到一個(gè)起始函數(shù)中作為參數(shù),逐層嵌套。
其實(shí)仔細(xì)想想一般場(chǎng)景就是在一個(gè)函數(shù)中先加工參數(shù),再把加工好的參數(shù)傳給另一個(gè)函數(shù)。

2. 同步和異步的理解:

同步:想象成向老板查詢東西,老板接到電話說我?guī)湍悴椴榘?,就查啊查,查到結(jié)果了就告訴你
異步:打電話查東西,老板說我查到了再打電話給你

差不多就這個(gè)意思,同步單線程順序執(zhí)行,瀏覽器中加載代碼就是同步的,前面寫個(gè)死循環(huán),會(huì)阻塞后面代碼執(zhí)行(瀏覽器中雖然可以并行下載,但不能并行執(zhí)行)

順序執(zhí)行,下面代碼當(dāng)然執(zhí)行結(jié)果是2

var a=1;
function add(){
    a++
}
function print(){
    console.log(a)
}
add()
print()

如果我們將add函數(shù)改造一下,加入延時(shí)會(huì)怎么樣?

var a=1;
function add(){
    //a++
    setTimeout(function(){
        a++
    },0)
}
function print(){
    console.log(a)
}
add()
print()

醬紫,會(huì)打印什么?
打印出來的是1?黑人問號(hào)

理解下啊,瀏覽器遇到setTimeout就會(huì)把它放到一個(gè)延時(shí)序列里,這個(gè)延時(shí)序列的執(zhí)行時(shí)機(jī)時(shí)其他代碼執(zhí)行完畢,so延時(shí)0秒也不執(zhí)行就不奇怪了吧

如何避免這個(gè)問題,如何避免這個(gè)問題,當(dāng)然是把函數(shù)加到setTimeout的里面咯,like this:

function add(callback){
    //a++
    setTimeout(function(){
        a++
        callback()
    },0)
}

不要看到calbback就發(fā)毛,這個(gè)東西就是個(gè)回調(diào)函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容