標籤:file asc 時代 順序 位置 過程 llb UI 回呼函數
我這裡寫了一個程式碼片段,用來類比一個嵌套的非同步過程,下面我總結了下這段代碼的執行順序
var fs = require("fs");fs.stat(‘a.txt‘,callbackOne(err,stat){ //執行callbackOne回呼函數 if(err){ fs.readFile("aa.txt",readFileCallbackOne(err,stat){ //執行readFileCallbackOne回呼函數 }) } //說明1})fs.stat(‘b.txt‘,callbackTwo(err,stat){ //執行callbackTwo回呼函數 if(err){ fs.readFile("bb.txt",readFileCallbackTwo(err,stat){ //執行readFileCallbackTwo回呼函數 }) } //說明2})
//說明0
代碼自上而下執行,由於非同步作業所以代碼在執行到兩個讀取檔案函數的時候會先把兩個時間放入事件隊列中,直接執行到"說明0"的位置:
此時事件隊列中的事件:
callbackOne
callbackTwo
當執行到"說明0"的位置的時候,nodejs此時會去執行callbackOne,callbackOne裡面把檔案讀完後也會有一個回調事件,此時放入事件隊列,事件隊列中的事件:callbackOne callbackTwo readFileCallbackOne,此時會走到"說明1"的位置,表示callbackOne執行完成:
此時事件隊列中的事件:
callbackTwo
readFileCallbackOne
此時開始進入callbackTwo中執行,在執行callbackTwo的時候回有一個回調readFileCallbackTwo,此時繼續放入事件隊列中,
事件隊列中的事件:callbackTwo readFileCallbackOne readFileCallbackTwo,此時代碼走到"說明2"的位置,表示callbackTwo執行完成:
此時事件隊列中的事件:
readFileCallbackOne
readFileCallbackTow
然後再去一次執行事件隊列中的事件,從而完成整個流程.
NodeJs非同步執行過程