回调地狱
当你在回调函数中嵌套太多的回调函数时,会出现回调地狱(也是一个厄运或回旋镖效果的金字塔)。以下是读取文件的示例(在 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 上可用的回调及其执行。它增加了回调代码的可读性,使你可以更好地控制回调代码流,包括允许你并行或串行运行它们。