node 中的 异步地狱回调
今天分享下node中的地狱回调(callback hell)
先看个例子
const fs = require("fs");
fs.readFile("./a.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data)
})
fs.readFile("./b.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data)
})
fs.readFile("./c.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data)
})
fs.readFile("./d.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data)
})
我们分别打开a.txt,b.txt,c.txt,d.txt
a.txt 文件中写入aaaaa
b.txt 文件中写入bbbbb
c.txt 文件中写入ccccc
d.txt文件中写入ddddd
因为我们上篇博文中讲解了 异步的执行顺序是不确定的 所以执行出来可能是
aaaaa
ccccc
bbbbb
ddddd
也可能是
aaaaa
bbbbb
ddddd
ccccc
所以当我们想要读取文件按照顺序执行,可以用嵌套的方法如
const fs = require("fs");
fs.readFile("./a.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data);
fs.readFile("./b.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data);
})
})
这样执行顺序就是 aaaaaa bbbbbb 我们分别把读取c文件和d文件都嵌套到里面
const fs = require("fs");
fs.readFile("./a.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data);
fs.readFile("./b.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data);
fs.readFile("./c.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data);
fs.readFile("./d.txt", "utf-8", (err, data) => {
if (err) throw err;
console.log(data);
})
})
})
})
这样我们执行完代码就会按照顺序执行也就是
aaaaaa
bbbbbb
cccccc
dddddd
我们可以回过头来观察一下目前的代码,虽然实现了按照顺序执行的目的,可是代码非常的乱,为了让大家更加直观的体验 我们在增加几个读取文件的操作

随着读取的文件越来越多,我们发现需要嵌套的层数也越来越多,网上有一个非常出名的图片

这就是地狱回调的案例,缺点很明显:代码嵌套越来越多,维护起来要人命,还很容易出现错误,所以我们不要写出这样的代码,下一篇会介绍如何解决地狱回调嵌套的问题

浙公网安备 33010602011771号