在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视频教程》