回调地狱

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