回撥地獄
當你在回撥函式中巢狀太多的回撥函式時,會出現回撥地獄(也是一個厄運或迴旋鏢效果的金字塔)。以下是讀取檔案的示例(在 ES6 中)。
const fs = require('fs');
let filename = `${__dirname}/myfile.txt`;
fs.exists(filename, exists => {
if (exists) {
fs.stat(filename, (err, stats) => {
if (err) {
throw err;
}
if (stats.isFile()) {
fs.readFile(filename, null, (err, data) => {
if (err) {
throw err;
}
console.log(data);
});
}
else {
throw new Error("This location contains not a file");
}
});
}
else {
throw new Error("404: file not found");
}
});
如何避免回撥地獄****
建議巢狀不超過 2 個回撥函式。這將有助於你保持程式碼可讀性,並且將來我將更容易維護。如果你需要巢狀 2 個以上的回撥,請嘗試使用分散式事件 。
還有一個名為 async 的庫,可以幫助管理 npm 上可用的回撥及其執行。它增加了回撥程式碼的可讀性,使你可以更好地控制回撥程式碼流,包括允許你並行或序列執行它們。