在nodejs中,“I/O”的操作結果基本上都需要在回調函數中處理,當處理多個事件時回調函數就會一層層的嵌套,這就是回調地獄;也就是一個異步請求套著一個異步請求,一個異步請求依賴于另一個的執行結果,使用回調的方式相互嵌套的情況。
本文操作環境:Windows10系統、nodejs 12.19.0版、Dell G3電腦。
nodejs回調地獄是什么
nodejs中I/O的操作結果基本上都需要在回調函數中處理,當處理多個事件時回調函數就會一層層的嵌套,這就是回調地獄。
一個異步請求套著一個異步請求,一個異步請求依賴于另一個的執行結果,使用回調的方式相互嵌套
Nodejs最大的亮點就在于事件驅動, 非阻塞I/O 模型,這使得Nodejs具有很強的并發處理能力,非常適合編寫網絡應用。在Nodejs中大部分的I/O操作幾乎都是異步的,也就是我們處理I/O的操作結果基本上都需要在回調函數中處理,比如下面的這個讀取文件內容的函數:
fs.readFile('/etc/passwd', function (err, data) { if (err) throw err; console.log(data); });
那,我們讀取兩個文件,將這兩個文件的內容合并到一起處理怎么辦呢?大多數接觸js不久的人可能會這么干:
fs.readFile('/etc/passwd', function (err, data) { if (err) throw err; fs.readFile('/etc/passwd2', function (err, data2) { if (err) throw err; // 在這里處理data和data2的數據 }); });
那要是處理多個類似的場景,豈不是回調函數一層層的嵌套啊,這就是大家常說的回調金字塔或回調地獄的問題。
推薦學習:《nodejs視頻教程》