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

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ù)

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

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

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