为什么NodeJS的回调会被称为地狱?
nodejs中提供异步操作都是使用回调函数,比如
fs.readFile('filename',function(err, data){
//todo...
})
在前端这种模式是没什么问题的,DOM事件相对而言不会存在互相依赖或需要多个事件一起协作的场景
但是对于Node而言,事务中存在多个异步调用的场景比比皆是。比如一个遍历目录的操作,代码如下:
fs.readdir(path.join(__dirname, '..'), function (err, files) {
files.forEach(function (filename, index) {
fs.readFile(filename, function (err, file) {
// todo
})
})
})
当然这个还是比较好的情况,很多时候业务逻辑很复杂,嵌套层数更多了.嵌套多了不便于阅读理解代码,显得很混乱.
但好消息是Nodejs8提供了ES7的async/await语法糖,让我们可以写出更优雅的代码.而且Nodejs官方自带库也在改变支持async/await,在Nodejs10中可以使用fs.promises,
dns.promises
了,比如可以这样写:const fs = require('fs').promises
async function main(){
const data = await fs.readfile('filename')
//todo
}
main()
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有